C# 如何按每行的最大值对多维数组进行排序?

C# 如何按每行的最大值对多维数组进行排序?,c#,arrays,sorting,multidimensional-array,C#,Arrays,Sorting,Multidimensional Array,我正在开发一个系统来跟踪球员,他们的三个得分,然后找出胜利者。获胜者是三次个人得分中得分最高的一次。换句话说,分数加起来并不重要,重要的是他们的最高分数 作为一个例子,我刚刚在这里硬编码了一些值。数组的第一个索引号按名称的顺序排列。约翰得了42分,38分,然后是43分,以此类推 string[] player = {"John", "Jack", "Joe", "Jim", "Jacob"}; int[,] stats = { {42, 38, 43

我正在开发一个系统来跟踪球员,他们的三个得分,然后找出胜利者。获胜者是三次个人得分中得分最高的一次。换句话说,分数加起来并不重要,重要的是他们的最高分数

作为一个例子,我刚刚在这里硬编码了一些值。数组的第一个索引号按名称的顺序排列。约翰得了42分,38分,然后是43分,以此类推

    string[] player = {"John", "Jack", "Joe", "Jim", "Jacob"};
    int[,] stats = {
               {42, 38, 43},
               {37, 36, 39},
               {35, 40, 37},
               {41, 44, 38},
               {33, 34, 37}
               };
现在,我想做一个函数,确定这三次尝试中哪个玩家得分最高,并显示三次得分最高的玩家,每个人一次,按姓名顺序排列。 因此,标签中的输出最终将如下所示:

1.吉姆-44 2.约翰-42 3.乔-40
所以,在我看来,问题出现了,必须检查每一行的最高值,然后可以创建一个新数组,同时仍然跟踪谁拥有分数,以便正确地打印它。我是新来的。有人知道如何实现这个结果吗?

Linq有一个很酷的功能,叫做Zip,它基本上就像两个可枚举集合上的拉链一样。它逐项进行,并基于每个集合中相同索引处的项创建结果

所以你可以这样做:

 player.Zip(stats,(p,i) => new { Player = p, HighScore = i.Max() })
       .OrderBy(m => m.HighScore)
然后,您可以对该结果进行foreach,以便按顺序打印我们的获奖者


编辑:不能100%确定这将适用于多维数组。希望它能让您朝着正确的方向前进。

似乎您了解解决问题所需的步骤。多维数组很少是存储数据的好选择。没有太多API支持对它们执行查询、聚合或转换。您需要使用多维数组吗?如果我们可以使用列表和播放器对象来实现这一点,这将变得非常简单。这是一个可接受的解决方案吗?我建议使用for循环来熟悉C语言编程。然后您可以使用更优雅的解决方案,例如LINQ。试一试,当你陷入困境时,给我们看看你的代码。问题是一个矩形数组实际上是一个集合,它不像锯齿状数组那样是一个序列。我不认为你可以应用一个Zip操作符来将一个维度从其他维度中分离出来。不过这是一个简洁的解决方案,不需要额外的类。好主意@迈克,是的,我想你是对的。哦,好吧……这是一种很好的简化方式。
public class Player
        {
            public string Name { get; set; }
            public List<int> Score { get; set; }
        }

List<Player> playerList = new List<Player>();
            playerList.Add(new Player() { Name = "John", Score = new List<int>() { 42, 38, 43 } });
            playerList.Add(new Player() { Name = "Jack", Score = new List<int>() { 37, 36, 39 } });
            playerList.Add(new Player() { Name = "Joe", Score = new List<int>() { 35, 40, 37 } });
            playerList.Add(new Player() { Name = "Jim", Score = new List<int>() { 41, 44, 38 } });
            playerList.Add(new Player() { Name = "Jacob", Score = new List<int>() { 33, 34, 37 } });

        var result2 = from p in playerList orderby p.Score.Max() descending select p;
var result = from p in playerList where p.Score.Max() == ((from x in playerList select new { x.Name, MaxScore = x.Score.Max() }).Max(x => x.MaxScore)) select p;