如何在执行计算时忽略2D数组中的值

时间:2016-03-28 05:11:26

标签: c#

给定任何2D数组忽略每个数组中的最小值和最大值(如果存在多个最小/最大值的值,则忽略一个)。然后计算剩余值的总和。

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

第一个数组的总和将返回26 第二个数组的总和将返回30

存储这些总数。

1 个答案:

答案 0 :(得分:0)

我怀疑你是MultiDimensional数组还是数组数组(Jagged Arrays)。您无法dimensions数组中拥有不同的MultiDimensional

所以我假设你有阵列数组,现在你可以这样做。

    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