【发布时间】:2011-05-17 09:04:09
【问题描述】:
如何将一些对象数组追加到一个大对象数组中?
例如,我有 3 个类型的元素:object[],并且想要制作其中之一。如何做到这一点?
【问题讨论】:
-
一定要用数组吗?如果不是,我强烈推荐一个列表 (msdn.microsoft.com/en-us/library/6sh2ey19.aspx)
-
你想合并数组对吗?
标签: c#
如何将一些对象数组追加到一个大对象数组中?
例如,我有 3 个类型的元素:object[],并且想要制作其中之一。如何做到这一点?
【问题讨论】:
标签: c#
使用这个:
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();
【讨论】:
你可以在他们身上调用Concat方法
var newArray = a.Concat(b).Concat(c).ToArray();
【讨论】:
根据您需要如何使用组合列表,最高效的解决方案是将您的数组输入一个迭代器块并以可枚举的方式返回:
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()。
【讨论】:
或者好的,老式的方式:
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];
【讨论】: