2016-03-28 19 views
-3

鑑於任何二維數組忽略了每個數組中最小值和最大值(如果出現多次最小/最大值只忽略一個值)。然後計算剩餘值的總和。如何在執行計算時忽略二維數組中的值

int[,] scores = { 
          { 5, 8, 9, 3, 8, 5}, 
          { 3, 9, 6, 3, 9, 5, 7} 
         }; 

第一陣列的總將返回26 第二陣列的總將返回每個這些總數的30

存儲。

+0

您真的要排除項目,還是隻是按上述標準計算總和?另外,如何排序(標題中提到)是相關的? – Tal

+0

這真的不是一個地方發佈作業的問題,並期望得到爲你寫的答案。 –

+0

我有排序的原因我相信一個解決方案可能是按升序排列數組,然後在求和數組時忽略第一個和最後一個值。如果可以根據上述標準計算結果,則不需要排除該項目。我不知道該如何解決這個問題 – Michael

回答

0

我懷疑你是問題是MultiDimensional陣列或陣列陣列(Jagged Arrays)。你不能有不同的dimensionsMultiDimensional陣列。

所以我假設你有陣列陣列,現在你可以做到這一點。

int[][] numbers2 = new int[][] 
    { 
     new int[] {1, 4,5,6, 10}, 
     new int[] {1,-2,3, 10, 1, }, 
     new int[] {-7,-8,-9, -1, 0} 
    }; 

    var sum_array =numbers2.Select(x => x.OrderBy(c=>c) 
             .Skip(1) 
             .Take(x.Length-2) 
             .Sum(c=>c)  
           ); 

輸出:

15,5,-16 

的情況下,如果你想對付Multidimensional陣列,做到這一點。

int[,] numbers = new int[3,5] 
    { 
     {1, 4,5,6, 10}, 
     {1,-2,3, 10, 1, }, 
     {-7,-8,-9, -1, 0} 
    }; 


    var row_sum = numbers.Cast<int>()  
    .Select((x, i) => new { Index = i, Value = x }) 
    .GroupBy(x => x.Index/(numbers.GetUpperBound(1) +1)) 
    .Select(x => x.OrderBy(c=>c.Value).Skip(1).Take(numbers.GetUpperBound(1)-1).Sum(c=>c.Value)) 
    .ToArray(); 

這兩種情況你都會得到相同的輸出。

支票example