如何在c#中获取Max值相同的长度数组

时间:2015-12-01 06:07:24

标签: c# arrays

我的数组位于

之下
int[] T1 = new int[]{1,5,4};
int[] T2 = new int[]{2,4,3};
int[] T3 = new int[]{7,9,1};

我想要的序列的结果如下。

int[] result = {7,9,4}

我想在数组中查找最大值相同的索引[(例如)1,2,7)。

和合并数组是int[] result = {7,9,4}

请让我知道最好的方式

感谢

3 个答案:

答案 0 :(得分:4)

这是执行所需操作的简单方法。

int[] result = new int[T1.Length];

for (int i = 0; i < T1.Length; i++)
{
    result[i] = new[] {T1[i], T2[i], T3[i]}.Max();
}

您必须添加using System.Linq才能启用Max()扩展程序。

修改

这是一种允许您使用任意数量的数组的方法:

static T[] MaxElements<T>(params T[][] arrays) where T : IComparable<T>
{
    return Enumerable.Range(0, arrays[0].Length)
                     .Select(i => Enumerable.Range(0, arrays.Length)
                                            .Select(a => arrays[a][i]).Max()).ToArray();
}

您也必须为此添加using System.Linq;。您必须确保传入的所有元素具有相同的长度,否则您将遇到IndexOutOfRangeException
它可以如下使用;

var result = MaxElements(T1, T2, T3);

答案 1 :(得分:2)

以下是您的需求:

    static void Main(string[] args)
    {
        GetMaxArray(new[] { 1, 5, 4 }, new[] { 2, 4, 3 }, new[] { 7, 9, 1 });
    }
    private static void GetMaxArray(params int[][] m)
    {
        var length = m.First().Length;
        var r = new int[length];
        for (var i = 0; i < length; i++)
            r[i] = m.Select(a => a[i]).Max();
    }

答案 2 :(得分:0)

public int[] GetMaxValueArray(List<int[]> arrayList)
{
        int[] result = null;
        int maxArraySize;
        int maxCurrentArrayItemValue;

        if (arrayList != null && arrayList.Count > 0)
        {
            maxArraySize = 0;

            foreach (int[] array in arrayList)
                if (array.Length > maxArraySize)
                    maxArraySize = array.Length;

            result = new int[maxArraySize];

            for (int i = 0; i < maxArraySize; i++)
            {
                maxCurrentArrayItemValue = 0;

                foreach (int[] array in arrayList)
                    if (i < array.Length)
                        if (array[i] > maxCurrentArrayItemValue)
                            maxCurrentArrayItemValue = array[i];

                result[i] = maxCurrentArrayItemValue;
            }
        }

        return result;
 }