2015-12-01 26 views
-3

我的陣列低於如何獲得最大價值相同長度的數組在C#

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}

請讓我知道最好的辦法

感謝

+4

你能具體化你的問題? –

+1

我認爲使用for循環將是這裏最好的方法,例如:for(i = 0 to arraylength){比較位置i上的元素,添加到數組最大元素}' – wudzik

+0

@wudzik您能向我展示示例源嗎? – HighEndGuy

回答

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(); 
} 

你必須爲了使Max()擴展添加using System.Linq


編輯

下面是允許你使用任意數量的陣列的方法:

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); 
+0

這僅限於3個陣列。 –

+0

@MohammadMirMostafa:查看更新。它允許你使用任意數量的數組。 –

+0

是的。這更好。謝謝 –

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(); 
    } 
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; 
}