【问题标题】:How to sort an array based on specific index [duplicate]如何根据特定索引对数组进行排序[重复]
【发布时间】:2016-01-19 16:40:37
【问题描述】:

我有一个类似下面代码的数组:

    struct Book_Struct
    {
        public string Title;
        public string Auther;
        public int Date;
        public int ID;
    }

    static void Print(Book_Struct[] a, int b)
    {
        for (int i = 0; i < b; i++)
        {
            Console.WriteLine("  Name of Book " + (i + 1) + " is : " + "\" " + a[i].Title + " \"");
            Console.WriteLine("Auther of Book " + (i + 1) + " is : " + "\" " + a[i].Auther + " \"");
            Console.WriteLine("  Date of Book " + (i + 1) + " is : " + "\" " + a[i].Date + " \"");
            Console.WriteLine("    ID of Book " + (i + 1) + " is : " + "\" " + a[i].ID + " \"");
            Console.WriteLine("\n---------------------------------\n");
        }
    } 

我想根据例如书名对这个数组进行排序。我该怎么做?

【问题讨论】:

  • 顺便说一句,我会强烈建议不要使用可变结构和公共字段。看起来这可能应该是一个具有公共 属性 的类...您还应该查看 .NET 命名约定。
  • 同样在 7 年后@JonSkeet 不再推荐重复的stackoverflow.com/questions/1304278/…(但它仍然相关)。您可以在 duplicate 中找到明确讨论数组的建议。

标签: c# arrays


【解决方案1】:

你可以使用Array.Sort:

Array.Sort(a, (b1, b2) => b1.Title.CompareTo(b2.Title));

或 LINQ:

a = a.OrderBy(book => book.Title).ToArray();

后者需要重新创建数组。

顺便说一句,使用类而不是mutable struct.

【讨论】:

    【解决方案2】:

    使用 LINQ 的 OrderBy 对数组进行排序:

    a = a.OrderBy(x => x.Title).ToArray();
    

    Reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-26
      • 2020-02-22
      • 1970-01-01
      • 2013-03-06
      • 2017-01-12
      • 2017-08-11
      • 2011-11-06
      • 1970-01-01
      相关资源
      最近更新 更多