【问题标题】:Obtaining the min and max of a two-dimensional array using LINQ使用 LINQ 获取二维数组的最小值和最大值
【发布时间】:2011-03-04 05:12:12
【问题描述】:

如何使用 LINQ 获得二维数组的最小值和最大值?需要明确的是,我的意思是数组中所有项目的最小值/最大值(不是特定维度的最小值/最大值)。

还是我只需要循环使用老式的方式?

【问题讨论】:

    标签: c# linq arrays multidimensional-array


    【解决方案1】:

    由于 Array 实现了IEnumerable,你可以这样做:

    var arr = new int[2, 2] {{1,2}, {3, 4}};
    int max = arr.Cast<int>().Max();    //or Min
    

    【讨论】:

    • 对于未来的搜索者,stackoverflow.com/a/641565 用于锯齿状阵列,即。 int[][] SomeArray = ...;,使用聚合枚举数的var Flattened = SomeArray.SelectMany(x =&gt; x)。然后你可以只做Flattened.Max() 例如。
    • Josh:如果我错了,请纠正我,但在我看来,你会将整个数组复制到另一个扁平数组中只是为了进行最大搜索,这首先会产生复制开销,然后是另一个 O(n),因此对于这样一个简单的问题具有可怕的整体复杂性。有时优雅和简洁并不是一切。
    【解决方案2】:

    这似乎有效:

    IEnumerable<int> allValues = myArray.Cast<int>();
    int min = allValues.Min();
    int max = allValues.Max();
    

    【讨论】:

      【解决方案3】:

      这里是变种:

      var maxarr = (from int v in aarray select v).Max();
      

      其中 aarray 是 int[,]

      【讨论】:

        【解决方案4】:

        您可以实现List&lt;List&lt;type&gt;&gt; 并在foreach 循环中找到最小值和最大值,并将其存储到List。然后,您可以从一维列表中所有值的列表中轻松找到Min()Max()

        这是我首先想到的,我自己对此很好奇,我想看看谷歌是否可以采用更简洁的方法。

        【讨论】:

        • 如何将二维数组放入列表中?
        • 啊,我想得太远了,现在我意识到如果要将数组放入列表中,您可以使用代码将 MIN/MAX 从我设想填充的同一循环中取出列表。 :/这是一个长时间的哀悼,没有足够的咖啡:D
        • 你可以展平数组,@devuxer
        猜你喜欢
        • 2017-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-28
        相关资源
        最近更新 更多