【问题标题】:How to sort an array containing class objects by a property value of a class instance? [duplicate]如何通过类实例的属性值对包含类对象的数组进行排序? [复制]
【发布时间】:2010-11-21 05:10:26
【问题描述】:

可能重复:
How to sort an array of object by a specific field in C#?

给定以下代码:

MyClass myClass;
MyClassArray[] myClassArray = new MyClassArray[10];

for(int i; i < 10; i++;)
{
    myClassArray[i] = new myClass();
    myClassArray[i].Name = GenerateRandomName();
}

例如,最终结果可能如下所示:

myClassArray[0].Name //'John';
myClassArray[1].Name //'Jess';
myClassArray[2].Name //'James';

您将如何根据 myClass.Name 属性按字母顺序对 MyClassArray[] 数组进行排序,以便数组最终看起来像这样:

myClassArray[0].Name //'James';
myClassArray[1].Name //'Jess';
myClassArray[2].Name //'John';

*编辑:我使用的是 VS 2005/.NET 2.0。

【问题讨论】:

  • 就我而言,这不是一回事。
  • 嗯,从表面上看,是一回事。如果你要对重复的旗帜进行比赛,那么至少要准备好解释为什么您的问题与之前提出的问题不同,以及为什么针对该问题给出的答案对您的情况没有帮助。否则,有什么意义?
  • 您的尼古丁流中的血液不足,是吗?肖格? :)
  • 这对我来说似乎不是重复的,尽管事实上标题相似,因为另一个问题实际上是关于列表,而不是数组。公认的答案是使用数组缺乏的 Linq 和 List 功能。这里接受的答案对我有用,而那些答案却不行。

标签: c# arrays .net-2.0 performance


【解决方案1】:

让MyClass实现IComparable接口,然后使用Array.Sort

这样的事情适用于 CompareTo(假设 Name 属性的类型为字符串)

public int CompareTo(MyClass other)
{
    return this.Name.CompareTo(other.Name);
}

或者只是使用 Linq

MyClass[] sorted = myClassArray.OrderBy(c => c.Name).ToArray();

【讨论】:

    【解决方案2】:

    您可以使用带有Comparison&lt;T&gt; 参数的Array.Sort 重载:

    Array.Sort(myClassArray,
        delegate(MyClass x, MyClass y) { return x.Name.CompareTo(y.Name); });
    

    【讨论】:

    • 我需要相同的,但按降序排列,只是否定了返回结果。它工作得很好:)
    猜你喜欢
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多