2011-05-17 38 views
2

可能重复:
How do I concatenate two arrays in C#?如何在C#中添加一些对象数组?

如何追加一些对象数组合并为一个大的对象数组?

例如,我有3个元素类型:object[]并且想要制作其中的一个。这个怎么做?

+0

你必须使用数组吗?如果没有,我会强烈推荐一个列表(http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx) – ThePower 2011-05-17 09:05:26

+0

你想合并数组的权利? – 2011-05-17 09:05:35

回答

12

使用此:

object[] element1 = ...; 
object[] element2 = ...; 
object[] element3 = ...; 
var list = new List<object>(); 
list.AddRange(element1); 
list.AddRange(element2); 
list.AddRange(element3); 
var result = list.ToArray(); 

另一种方法是:

var result = element1.Concat(element2).Concat(element3).ToArray(); 
3

可以调用方法Concat他们

var newArray = a.Concat(b).Concat(c).ToArray(); 
1

还是不错的,老式的方式:

object[] objects = new object[objects1.Length + objects2.Length + objects3.Length]; 
int i = 0; 
for(int j = 0; j<objects1.Length; j++) 
    objects[i++] = objects1[j]; 
for(int j = 0; j<objects2.Length; j++) 
    objects[i++] = objects2[j]; 
for(int j = 0; j<objects3.Length; j++) 
    objects[i++] = objects3[j]; 
+0

没有必要使这样的事情复杂化.. – 2011-05-17 09:10:04

+0

我不会称之为“复杂”。这可能是编译器最终创建的。 – Carra 2011-05-17 09:12:45

+0

+1:此代码正在工作,不需要downvote。 – 2011-05-17 09:13:57

3

取决于你需要如何使用组合列表,最高效的解决方案将是您的阵列送入迭代器块和枚举返回:

IEnumerable<object> CombineArrays (params object[] arrays) 
{ 
    foreach (object[] arr in arrays) 
    { 
      foreach (object obj in arr) 
      { 
       yield return obj; 
      } 
    } 
} 

... 

IEnumerable<object> result = CombineArrays (array1, array2, array3); 

这种方式将不再需要任何额外的存储空间来为新的组合名单。 IEnumerable结果将依次枚举数组。您可以使用任何Linq操作员处理结果 - 因此您可以根据需要进行分组,筛选和选择。

如果您需要从此创建一个可写列表,您需要对结果调用ToList()ToArray()

+0

+1:非常好的主意! – 2011-05-17 09:13:28