C#如何对多个对象进行排序

时间:2020-02-04 14:19:20

标签: c# sorting

  1. 向用户询问他要分配多少卖家。

  2. 为要分配的每个卖方获取卖方的名称,身份证,城市以及他卖出了多少苹果。

  3. 根据售出的苹果数量创建4个等级。在50个苹果下排名1,在50-99个苹果之间排名2,在100-199个苹果之间排名3,在199个苹果之间排名4。

  4. 分配了所有卖方后,每个人都按照他们卖出的苹果数量从低到高排序。

  5. 打印出每个卖家的信息(姓名,身份证,城市,出售的苹果)以及他们所在的级别以及同一级别有多少个卖家。

示例:

name: daniel
id: 18886
city: chicago
apples sold: 30
1 seller have reached level 1: under 50 apples


name: elno
id: 18843
city: chicago
apples sold: 212

name: noel
id: 1567
city: chicago
apples sold: 230
2 seller have reached level 4: over 199 apples

现在这是我的代码的样子,我只是不知道如何在控制台上写出相应的内容

public class Seller 
{
    public string Name { get; set; }
    public int Id { get; set; }
    public string City { get; set; }
    public int Apples { get; set; } 

}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hi and Welcome to The Garden!");
        Console.WriteLine("How many sellers would u like to assign?");

        int Assign = int.Parse(Console.ReadLine());

        Seller[] NewSeller = new Seller[Assign];

        for (int i = 0; i < Assign; i++) 
        {

            NewSeller[i] = new Seller();

            Console.WriteLine("______________________________");

            Console.Write("Enter name for seller" + i + "\nName: ");
            NewSeller[i].Name = Console.ReadLine();

            Console.Write("Enter id for seller " + i + "\nID; ");
            NewSeller[i].Id = int.Parse(Console.ReadLine());

            Console.Write("Enter city for seller " + i + "\nCity: ");
            NewSeller[i].City = Console.ReadLine();

            Console.Write("Enter apples sold for seller " + i + "\nApples: ");
            NewSeller[i].Apples = int.Parse(Console.ReadLine());

        }

        for (int i = 0; i < Assign; i++)
        {
            Console.WriteLine("__________________________________________________________");
            Console.WriteLine("|   Seller {0} |" , i);
            Console.WriteLine("|--------------");
            Console.WriteLine("| Name: {0}", NewSeller[i].Name);
            Console.WriteLine("| ID: {0}", NewSeller[i].Id);
            Console.WriteLine("| City: {0}", NewSeller[i].City);
            Console.WriteLine("| Apples sold: {0}", NewSeller[i].Apples);
            Console.WriteLine("__________________________________________________________");

        }
    }
}

2 个答案:

答案 0 :(得分:0)

这看起来像是一项家庭作业:)

对集合进行排序的最简单方法是使用LINQ,通过Lambda表达式:

https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.orderby?view=netframework-4.8

我还建议使用字符串插值,因为它更简洁,更容易理解:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated

对于您而言,您将执行以下操作:

public class Seller 
{
    public string Name { get; set; }
    public int Id { get; set; }
    public string City { get; set; }
    public int Apples { get; set; }



}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hi and Welcome to The Garden!");
        Console.WriteLine("How many sellers would u like to assign?");

        int Assign = int.Parse(Console.ReadLine());
        Seller[] NewSeller = new Seller[Assign];

        for (int i = 0; i < Assign; i++)
        {
            NewSeller[i] = new Seller();

            Console.WriteLine("______________________________");
            Console.Write($"Enter name for seller {i}: ");
            NewSeller[i].Name = Console.ReadLine();

            Console.Write($"Enter id for seller {i}: ");
            NewSeller[i].Id = int.Parse(Console.ReadLine());

            Console.Write($"Enter city for seller {i}: ");
            NewSeller[i].City = Console.ReadLine();

            Console.Write($"Enter apples sold for seller {i}: ");
            NewSeller[i].Apples = int.Parse(Console.ReadLine());
        }

        //default sorting is ascending, so low to high. use OrderByDescending when you need high to low
        Seller[] sortedList = NewSeller.OrderBy(s => s.Apples).ToArray();
        for (int i = 0; i < sortedList.Length; i++)
        {
            Seller currentSeller = sortedList[i];
            Console.WriteLine("__________________________________________________________");
            Console.WriteLine($"|   Seller {i} |");
            Console.WriteLine("|--------------");
            Console.WriteLine($"| Name: {currentSeller.Name}");
            Console.WriteLine($"| ID: {currentSeller.Id}");
            Console.WriteLine($"| City: {currentSeller.City}");
            Console.WriteLine($"| Apples sold: {currentSeller.Apples}");
            Console.WriteLine("__________________________________________________________");
        }
    }
}

答案 1 :(得分:0)

您可以使用Linq对卖家进行排序并获取级别详细信息

//Sort the seller and get the Level details
var results = sellers.OrderBy(s => s.Apples)
                     .Select(x => new
                            {
                                x.Name,
                                x.Id,
                                x.City,
                                x.Apples,
                                Level = x.Apples < 50 ? 1 : x.Apples < 99 ? 2 : x.Apples < 199 ? 3 : 4,
                                LevelDetails = x.Apples < 50 ? "under 50" : x.Apples < 99 ? "over 50" : x.Apples < 199 ? "over 99" : "over 199"
                        }); 

//Iterate the sorted list
foreach (var result in results)
{
    Console.WriteLine("__________________________________________________________");
    Console.WriteLine("|   Seller {0} |", results.ToList().IndexOf(result) + 1);
    Console.WriteLine("|--------------");
    Console.WriteLine("| Name: {0}", result.Name);
    Console.WriteLine("| ID: {0}", result.Id);
    Console.WriteLine("| City: {0}", result.City);
    Console.WriteLine("| Apples sold: {0}", result.Apples);
    Console.WriteLine("| {0} seller have reached level {1}: over {2} apples", results.Where(x=>x.Level==result.Level).Count(), result.Level, result.LevelDetails);
    Console.WriteLine("__________________________________________________________");
}
相关问题