如何在 C# 中对整数 2D 数组进行排序



我有一个二维数组,其中包含 6 个不同销售员的已售商品数量。我正在尝试对数组进行排序以找到所有文章中销量最高的文章。

我的问题是能够对二维数组进行排序并读取其内容。

我试过了

        int[,] sortedByFirstElement = nrArticles.OrderBy(x => x[0]);

这给了我一条错误消息:"'int[,] 不包含'OrderBy' 的定义,也没有可访问的扩展方法......等等"

我已经尝试过,这给了我一条错误消息,声称输入不在 int 中。

        Array.Sort(nrArticles);
        foreach (int value in nrArticles)
        {
            Console.Write(value);
        }

以下代码是我到目前为止所得到的不包括排序尝试的代码。

        string[,] salesMan = new string[6, 3];
        int[,] nrArticles = new int[6, 0];
        string line;
        int nr;
        for (int i = 0; i < 5; i++)
        {
            Console.Write("Enter the name of salesman: ");
            line = Console.ReadLine();
            salesMan[i, 0] = line;
            Console.Write("Enter the social number: ");
            line = Console.ReadLine();
            salesMan[i, 1] = line;

            Console.Write("Enter the district: ");
            line = Console.ReadLine();
            salesMan[i, 2] = line;
            //This is where i convert the entered value into an int taken 
            by the array
            Console.Write("Enter the amount of sold articles: ");
            line = Console.ReadLine();
            nr = Int32.Parse(line);
            nrArticles[i, 0] = nr;


        }
        Console.Write("Namn ttPersnr tttDistrikt ttAntal");
        for (int j = 0; j < 5; j++)
        {
           Console.Write("n"+salesMan[j, 0] +"tt");
           Console.Write(salesMan[j, 1] + "ttt");
           Console.Write(salesMan[j, 2] + "ttt");
           Console.Write(nrArticles[j, 0]);
        }
         //Here's where i'd put my code of sorting my integer array 
         nrArticles (If i had one). 
    }
}

它的预期结果将看到一个示例,例如:231、183、130、122、40、10。也许作为一个单独的数组,甚至是字符串?

任何帮助将不胜感激。

我认为,简短的回答是 2D 数组没有内置的 OrderBy 方法,因此您需要自己处理它。我认为您使用 Array.Sort 方法走在正确的轨道上,但这仍然仅限于对一维数组进行排序。

其他人已经提到了这一点,但我认为你会在整数的 2D 数组上遇到很多麻烦。 除非有特定的原因要像你一样这样做,否则我认为你最好为你的销售人员创建一个类,该类将与单个销售员相关的全套属性封装为一个实体。 (例如名称、地区、出售的物品等)。

一旦有了明确定义的类型定义,LINQ(例如)就可以在您希望如何组织这些对象的集合方面为您提供很大的灵活性。

下面是一些非常简单的示例代码:

using System.Linq;
namespace ConsoleApp1
{
    class Program
    {
        public class Salesman
        {
            public string Name { get; set; }
            public int District { get; set; }
            public int ArticlesSold { get; set; }
        }
        static void Main(string[] args)
        {
            var salesmen = new Salesman[] {
                 // Fill collection by some means...
            };
            // Then for example:
            // sort by Ascending sales count
            var sorted = salesmen.OrderBy(x => x.ArticlesSold);
            // or descending
            sorted = salesmen.OrderByDescending(x => x.ArticlesSold);
            // or by something more complex
            sorted = salesmen.OrderBy(x => x.ArticlesSold).ThenBy(x => x.District);
        }
    }
}

请改用 int[][];这样,您就可以在结构上使用 Linq。

int[][] arr = new int[6][];
for(int i =0; i<6; i++)
{
    arr[i] = new int[1];
}
arr[0][0] = 100;
arr[1][0] = 50;
arr[2][0] = 60;
arr[3][0] = 200;
arr[4][0] = 10;
arr[5][0] = 220;
int[][] sortedArr = arr.OrderBy(x => x[0]).ToArray();
for(int i =0; i<6; i++)
{
    Console.WriteLine(sortedArr[i][0]);
}

最新更新