如果它们存在,你如何通过两个int数组并求和它们的值

时间:2013-05-07 09:36:15

标签: c# arrays

我想创建一个方法,我可以发送两个数组(将包含整数)。这些阵列不一定同样长。例如,第一个数组的索引值为15,而第二个数组的索引值为12.在这种情况下,我想为前12个数组添加array1和array2,然后获取最后3个数组的array1值。

我想到这样的事情:

int[] ArrTotal(int[] array1, int[] array2)
    {
        int[] total = new int[15];

        for (int i = 0; i < 15; i++)
        {
            if (array1[i] != null && array2[i] != null)
            {
                total[i] = array1[i] + array2[i];
            } 
            else if(array1[i] != null)
            {
                total[i] = array1[i];
            }
            else if (array2[i] != null)
            {
                total[i] = array2[i];
            }
            else
            {
                total[i] = 0;
            }
        }

        return total;
    }

问题是我无法检查并查看int数组是否为null。我读了一些关于做的事:     如果(i&lt; array1.Length)

但这似乎也不起作用,它说在我的情况下它总是如此。 我是在正确的轨道上还是有一些我缺少的重大缺陷? :)

5 个答案:

答案 0 :(得分:4)

怎么样:

    int[] ArrTotal(int[] a, int[] b)
    {
        if (a == null || b == null) 
        {
            return (int[])(a ?? b).Clone();
        }
        int length = Math.Max(a.Length, b.Length);
        int[] result = new int[length];
        for (int i = 0; i < length; i++)
        {
            int sum = 0;
            if (a.Length > i) sum += a[i];
            if (b.Length > i) sum += b[i];
            result[i] = sum;
        }
        return result;
    }

答案 1 :(得分:1)

尝试在以下之前检查两个数组的长度:

int length = (array1.Length < array2.Length ? array1.Length : array2.Length);

然后迭代并仅分配从0到较短数组长度的数组indeces - 1:

for (int i = 0; i < 15; i++)
    if (i < length)
        newArray[i] = array1[i] + array2[i];
    else
        newArray[i] = 0;

答案 2 :(得分:0)

        int[] a1 = new int[] { 1, 2, 3, 2, 3, 1 };
        int[] a2 = new int[] { 1, 2, 3, 2, 3, 1, 3, 2, 3 };
        List<int> r = new List<int>();
        bool a1_longer = (a1.Length > a2.Length);
        int length_diff = Math.Abs(a1.Length - a2.Length);
        int length = (a1_longer ? a2.Length : a1.Length);
        for (int i = 0; i < length; i++) r.Add(a1[i] + a2[i]);
        for (int i = 0; i < length_diff; i++) {
            r.Add(a1_longer ? a1[length + i] : a2[length+i]);
        }
        r.ToArray();

答案 3 :(得分:0)

您可以使用Linq:

int[] ArrTotal(int[] array1, int[] array2)
{
    return Enumerable.Repeat(0, Math.Max(array1.Length,array2.Length))
        .Select((a, index) => a + 
            ((array1.Length > index) ? array1[index] : 0)+
            ((array2.Length > index) ? array2[index] : 0))
        .ToArray();
}

答案 4 :(得分:0)

使用Linq可以执行此操作(将处理空数组)。您需要在源代码文件的顶部添加using System.Linq

int[] ArrTotal(int[] array1, int[] array2)
{
    if ((array1 == null) && (array2 == null))
        return new int[0]; // Zero length array - put some other number here if you need!
    else if (array1 == null)
        return (int[])array2.Clone(); // Result will just be a copy of the non-null array.
    else if (array2 == null)
        return (int[]) array1.Clone(); // Result will just be a copy of the non-null array.
    else
    {
        int skip = Math.Min(array1.Length, array2.Length);

        return Enumerable
            .Zip(array1, array2, (i1, i2) => i1 + i2)
            .Concat(array1.Skip(skip))
            .Concat(array2.Skip(skip))
            .ToArray();
    }
}