如果排序指标保持不变,请避免使用List.Sort度假

时间:2013-09-17 11:54:23

标签: c# sorting compact-framework

我有一个List<Foo> fooList;,其中Foo被定义为

class Foo
{
    public int Importance { get; set; }

    public string Name { get; set; }
}

现在我将三个对象添加到fooList

fooList.Add(new Foo { Name = "Foo1", Importance = 1 });
fooList.Add(new Foo { Name = "Foo2", Importance = 1 });
fooList.Add(new Foo { Name = "Foo3", Importance = 1 });

现在我按重要性排序

fooList.Sort((a, b) => a.Importance.CompareTo(b.Importance));

并转储列表,我得

Foo3, Foo2, Foo1

再次排序给我

Foo1, Foo2, Foo3

这两个结果都是正确的,但它们让我的用户感到困惑。 是否有办法避免诉诸?

2 个答案:

答案 0 :(得分:2)

如果您要排序的字段的比较相等,则比较其他内容,例如对象本身:

fooList.Sort((a, b) => {
  int result = a.Importance.CompareTo(b.Importance);
  if (result == 0) {
    result = a.CompareTo(b);
  }
  return result;
});

答案 1 :(得分:2)

可能使用OrderByThenBy

fooList = fooList.OrderBy(x=>x.Importance).ThenBy(x=>x.Name).ToList();

它将在“重要”之后排序,然后在“名称”后排序,因此结果将相同。见下面的演示:

http://ideone.com/jf6Am9

编辑:

在这里,您可以找到OrderBySort之间的比较,这样您就可以考虑转到OrderBy C# Sort and OrderBy comparison。简而言之:OrderBy相对较快,此解决方案看起来更清晰:)