c# - 如何返回 C# 中最大元素的数组?

标签 c# arrays algorithm linq

我有多个 int 数组:

1) [1 , 202,4  ,55]
2) [40, 7]
3) [2 , 48 ,5]
4) [40, 8  ,90]

我需要得到所有位置上数字最大的数组。在我的例子中,这将是数组#4。说明:

  • 数组 #2、#4 的第一个位置的数字最大,因此在第一次迭代后将返回这两个数组([40, 7] 和 [40, 8 ,90])
  • 现在在比较上一次迭代返回的数组的第二个位置后,我们将得到数组 #4,因为 8 > 7
  • 等等...

您能为此推荐一个有效的算法吗?最好使用 Linq。

更新

长度没有限制,只要任意位置的某个数更大,那么这个数组就是最大的。

最佳答案

LINQ 效率不高(例如参见 LINQ vs FOREACH vs FOR )。但是,它具有很好的可读性。如果您确实需要比 LINQ 提供的更好的性能,则应该在不使用 LINQ 的情况下编写代码。但是,您不应该在知道需要优化之前就进行优化。

这不是专门针对性能进行调整,而是针对您的问题的清晰、可读的解决方案:

static int[] FindLargestArray(int[][] arrays)
{
    for (int i = 0; arrays.Length > 1 && i < arrays.Max(x => x.Length); i++)
    {
        var maxVal = arrays.Where(x => i < x.Length).Max(x => x[i]);
        arrays = arrays.Where(x => i < x.Length && x[i] == maxVal).ToArray();
    }
    return arrays[0]; //if more than one array, they're the same, so just return the first one regardless
}

根据具体情况,这个性能可能已经足够好了。

关于c# - 如何返回 C# 中最大元素的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13109301/

相关文章:

java - GameLogic,x 连续游戏

C++ 使用数组指针与 vector ?

ios - 使用 Array.filter 而不是对象获取索引列表

java - 带回溯的数独算法 - java

寻找所有关键路径的算法

c# - 测试一个值是否包含在 Dictionary<TKey, List<TValue>> 中

c# - 如何防止因无效的用户输入而崩溃?

c# - 处理后的 Reactive Rx 2.0 EventLoopScheduler ObjectDisposedException

C# Lambda 表达式 : Why should I use them?

JavaScript:减去数字范围