如何将按奇偶索引拆分后的两个数组合并回原数组?
合并奇偶索引拆分后的数组回到原数组
既然你已经用LINQ按奇偶索引把数组拆成了aEven和aOdd,而且保证两个数组长度相同,这里有几种优雅的方式把它们合并回原数组,完全不用修改拆分后的两个数组:
方法一:用Zip + SelectMany(最简洁的LINQ方式)
利用Zip方法把两个数组的对应元素配对,再通过SelectMany把每一对元素平铺成一个连续的数组:
int[] aEven = new[] { 1, 7 }; int[] aOdd = new[] { 3, 8 }; int[] originalArray = aEven.Zip(aOdd, (evenVal, oddVal) => new[] { evenVal, oddVal }) .SelectMany(pair => pair) .ToArray();
执行后originalArray就是{1, 3, 7, 8},完美还原原数组。这个方法的逻辑很直观:Zip会把aEven[0]和aOdd[0]配对、aEven[1]和aOdd[1]配对,每个配对生成一个包含两个元素的小数组,最后SelectMany把所有小数组拼接成一个大数组。
方法二:通过索引遍历生成
如果你更喜欢基于索引的逻辑,可以用Enumerable.Range生成原数组的所有索引,然后根据索引的奇偶性从对应的数组中取值:
int[] originalArray = Enumerable.Range(0, aEven.Length * 2) .Select(index => index % 2 == 0 ? aEven[index / 2] : aOdd[index / 2]) .ToArray();
这里因为两个数组长度相同,原数组长度就是aEven.Length * 2,遍历每个索引时,偶数索引对应aEven的第index/2个元素,奇数索引对应aOdd的第index/2个元素,逻辑清晰易懂。
两种方法都符合你的需求:不修改aEven和aOdd,代码简洁优雅,而且能准确还原原数组的结构。
内容的提问来源于stack exchange,提问作者zig
相关产品推荐
相关产品推荐

