我需要将数组与数组模型进行比较并完成结构,如下例所示:
array = [0,1,2,3,4]
model = [0,0,0,0,0,0,0]
result = [0,1,2,3,4,0,0]
模型无法更改,它是参考数组。
关于实现这一目标的最佳方法的任何想法?
答案 0 :(得分:4)
你可以这样做:
var array = new[]{0,1,2,3,4};
var model = new[]{0,0,0,0,0,0,0};
var result = array.Concat(model.Skip(array.Length)).ToArray();
这将在model
结束时从array
汇总缺少的元素。
Concat
,Skip
和ToArray
是在命名空间Enumerable
的{{1}}类中声明的LINQ扩展方法。因此,您需要在代码中添加System.Linq
。
答案 1 :(得分:3)
将短片复制到长片中:
int[] array = { 0, 1, 2, 3, 4 };
int[] model = { 0, 0, 0, 0, 0, 0, 0, };
int[] result = model;
array.CopyTo(result, 0);
Console.WriteLine(String.Join(" ", result));
如果你在评论中写的最好意味着最快,那么这里是一个比较:
Stopwatch st = new Stopwatch();
int[] array = new int[10000];
int[] model = new int[10200];
st.Start();
var asdf = array.Concat(model.Skip(array.Length)).ToArray();
st.Stop();
Console.WriteLine("Concat: " + st.ElapsedMilliseconds);
int[] arraya = new int[10000];
int[] modela = new int[10200];
st.Restart();
int[] result = modela;
arraya.CopyTo(result, 0);
st.Stop();
Console.WriteLine("Copy: " + st.ElapsedMilliseconds);
答案 2 :(得分:2)
如果您事先了解阵列长度,则可以执行此操作...
int[] array = { 0, 1, 2, 3, 4 };
int[] model = { 0, 0, 0, 0, 0, 0, 0, };
Array.Copy(array, model, array.Length);
如果没有,你可以这样......
int[] model = { 0, 1, 2, 3, 4 };
var array = new int[7];
var shorter = array.Length < model.Length ? array : model;
var longer = array.Length >= model.Length ? array : model;
Array.Copy(shorter, longer, shorter.Length);
......没有原件突变的最快......
int[] array = { 0, 1, 2, 3, 4 };
int[] model = { 4,5,6,7,8,9,1, };
var x = array.Length < model.Length ?
new { s = array, l = model, sl = array.Length, ll = model.Length } :
new { s = model, l = array, sl = model.Length, ll = array.Length };
var result = new int[x.ll];
Array.Copy(x.s, result, x.sl);
Array.Copy(x.l, x.sl, result, x.sl, x.ll - x.sl);
答案 3 :(得分:-1)
这是我的版本......可能比LINQ快一点。我的假设是你基于数字更大的数字进行替换,但我可能错了。
var array = new[]{0,1,2,3,4};
var model = new[]{0,0,0,0,0,0,0};
for(int i = 0; i < array.Length; i++)
{
if(array[i] > model[i])
{
model[i] = array[i];
}
}
如果没有,你可以简单地做一个Array.Copy