比较并完成两个数组

时间:2017-02-14 17:48:20

标签: c# arrays

我需要将数组与数组模型进行比较并完成结构,如下例所示:

array = [0,1,2,3,4]
model = [0,0,0,0,0,0,0]

result = [0,1,2,3,4,0,0]

模型无法更改,它是参考数组。

关于实现这一目标的最佳方法的任何想法?

4 个答案:

答案 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汇总缺少的元素。

ConcatSkipToArray是在命名空间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