.NET 2.0中是否有一个内置函数,可以将两个数组合并成一个数组?
这两个数组具有相同的类型。我从代码库中广泛使用的函数中获得这些数组,并且不能修改该函数以以不同的格式返回数据。
如果可能的话,我希望避免编写自己的函数来完成这个任务。
.NET 2.0中是否有一个内置函数,可以将两个数组合并成一个数组?
这两个数组具有相同的类型。我从代码库中广泛使用的函数中获得这些数组,并且不能修改该函数以以不同的格式返回数据。
如果可能的话,我希望避免编写自己的函数来完成这个任务。
当前回答
我假设你正在使用自己的数组类型,而不是内置的。net数组:
public string[] merge(input1, input2)
{
string[] output = new string[input1.length + input2.length];
for(int i = 0; i < output.length; i++)
{
if (i >= input1.length)
output[i] = input2[i-input1.length];
else
output[i] = input1[i];
}
return output;
}
另一种方法是使用内置的ArrayList类。
public ArrayList merge(input1, input2)
{
Arraylist output = new ArrayList();
foreach(string val in input1)
output.add(val);
foreach(string val in input2)
output.add(val);
return output;
}
这两个例子都是c#。
其他回答
试试这个:
ArrayLIst al = new ArrayList();
al.AddRange(array_1);
al.AddRange(array_2);
al.AddRange(array_3);
array_4 = al.ToArray();
就我个人而言,我更喜欢我自己的语言扩展,我可以随意添加或删除它以快速创建原型。
下面是一个字符串的例子。
//resides in IEnumerableStringExtensions.cs
public static class IEnumerableStringExtensions
{
public static IEnumerable<string> Append(this string[] arrayInitial, string[] arrayToAppend)
{
string[] ret = new string[arrayInitial.Length + arrayToAppend.Length];
arrayInitial.CopyTo(ret, 0);
arrayToAppend.CopyTo(ret, arrayInitial.Length);
return ret;
}
}
它比LINQ和Concat快得多。更快的方法是使用一个自定义的IEnumerable类型包装器,它存储传递数组的引用/指针,并允许对整个集合进行循环,就像它是一个普通数组一样。(适用于高性能计算,图形处理,图形渲染…)
你的代码:
var someStringArray = new[]{"a", "b", "c"};
var someStringArray2 = new[]{"d", "e", "f"};
someStringArray.Append(someStringArray2 ); //contains a,b,c,d,e,f
完整的代码和泛型版本请参见:https://gist.github.com/lsauer/7919764
注意:返回一个未扩展的IEnumerable对象。返回一个扩展对象稍微慢一些。
我从2002年开始编译这样的扩展,有很多功劳要归功于CodeProject和“Stackoverflow”上的乐于助人的人。我很快就会发布这些,并把链接放在这里。
如果你在一个数组中有源数组,你可以使用SelectMany:
var arrays = new[]{new[]{1, 2, 3}, new[]{4, 5, 6}};
var combined = arrays.SelectMany(a => a).ToArray();
foreach (var v in combined) Console.WriteLine(v);
给了
1
2
3
4
5
6
这可能不是最快的方法,但根据用例可能适合。
更简单的是使用LINQ:
var array = new string[] { "test" }.ToList();
var array1 = new string[] { "test" }.ToList();
array.AddRange(array1);
var result = array.ToArray();
首先将数组转换为列表并合并它们…之后,只需将列表转换回数组:)
我假设你正在使用自己的数组类型,而不是内置的。net数组:
public string[] merge(input1, input2)
{
string[] output = new string[input1.length + input2.length];
for(int i = 0; i < output.length; i++)
{
if (i >= input1.length)
output[i] = input2[i-input1.length];
else
output[i] = input1[i];
}
return output;
}
另一种方法是使用内置的ArrayList类。
public ArrayList merge(input1, input2)
{
Arraylist output = new ArrayList();
foreach(string val in input1)
output.add(val);
foreach(string val in input2)
output.add(val);
return output;
}
这两个例子都是c#。