You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Enumerable将多个集合合并为结构体集合?

合并等长数组的对应元素

你不需要用Enumerable.Join(),因为它是基于键值匹配的,而你要的是按索引位置配对,直接用Enumerable.Zip()方法就可以,它专门用来将多个等长序列的对应元素组合到一起。

三个数组合并示例

假设你的数组元素是自定义类型,比如:

public class ItemA { public int Id { get; set; } }
public class ItemB { public string Name { get; set; } }
public class ItemC { public decimal Price { get; set; } }

你可以先把A和B合并,再将合并结果和C组合,最终得到包含三个元素的结果数组:

var result = A.Zip(B, (a, b) => new { A = a, B = b })
              .Zip(C, (ab, c) => new { ab.A, ab.B, C = c })
              .ToArray();

如果需要合并成自定义的实体类,比如:

public class CombinedItem
{
    public ItemA ItemA { get; set; }
    public ItemB ItemB { get; set; }
    public ItemC ItemC { get; set; }
}

代码可以改成:

var result = A.Zip(B, (a, b) => new { A = a, B = b })
              .Zip(C, (ab, c) => new CombinedItem 
              { 
                  ItemA = ab.A, 
                  ItemB = ab.B, 
                  ItemC = c 
              })
              .ToArray();

处理更多数组的扩展方法

如果以后要合并更多等长数组,可以写个扩展方法简化操作:

public static class EnumerableExtensions
{
    public static IEnumerable<TResult> ZipThree<T1, T2, T3, TResult>(
        this IEnumerable<T1> source1,
        IEnumerable<T2> source2,
        IEnumerable<T3> source3,
        Func<T1, T2, T3, TResult> resultSelector)
    {
        using var enum1 = source1.GetEnumerator();
        using var enum2 = source2.GetEnumerator();
        using var enum3 = source3.GetEnumerator();
        
        while (enum1.MoveNext() && enum2.MoveNext() && enum3.MoveNext())
        {
            yield return resultSelector(enum1.Current, enum2.Current, enum3.Current);
        }
    }
}

用起来就更简洁:

var result = A.ZipThree(B, C, (a, b, c) => new CombinedItem 
{ 
    ItemA = a, 
    ItemB = b, 
    ItemC = c 
}).ToArray();

注意事项

  • 如果数组长度不一致,Zip会以最短的数组为准,停止合并后续元素。
  • 要是需要确保所有数组长度完全相同,可以先加个检查:
if (A.Length != B.Length || A.Length != C.Length)
{
    throw new ArgumentException("所有数组长度必须一致");
}

内容的提问来源于stack exchange,提问作者user3001150

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:42:10