【问题标题】:What is the default behaviour when list of tuples is sorted?对元组列表进行排序时的默认行为是什么?
【发布时间】:2015-03-03 02:21:58
【问题描述】:

我想使用int 值对Tuple<int, string> 中的List 进行排序。在这个example 中使用了以下代码:

List<Tuple<int, string>> list = new List<Tuple<int, string>>();
list.Add(new Tuple<int, string>(1, "cat"));
list.Add(new Tuple<int, string>(100, "apple"));
list.Add(new Tuple<int, string>(2, "zebra"));

list.Sort((a, b) => a.Item1.CompareTo(b.Item1));

foreach (var element in list)
{
    Console.WriteLine(element);
}

我注意到如果我更改了以下行:

list.Sort((a, b) => a.Item1.CompareTo(b.Item1));

到:

list.Sort();

元素再次排序。

这是否意味着默认行为是使用第一项?如果是,这两种技术之间是否存在性能差异?

【问题讨论】:

标签: c# list tuples .net-4.5


【解决方案1】:

元组通过使用该组件的默认排序依次比较每个组件来比较自己。不是很清楚,但是(from MSDN):

Tuple&lt;T1, T2&gt;.IComparable.CompareTo 方法使用默认的对象比较器来比较每个组件。

这与您的示例略有不同,因为在匹配的情况下,排序将继续到元组的第 2、3、4 等组件(在您的情况下为 string)(2 个项目为 int 7,例如)

【讨论】:

  • 为什么首先说,比较每个组件。然后示例说数组已按其第一个组件排序
  • @Selman22 因为没有重复;试试{1, "c"}, {2, "a"}, {2,"c"}, {1, "a"} 看看它按两者排序(输出应该是{1,"a"},{1,"c"},{2,"a"},{2,"c"}
  • 非常感谢。这很有趣。我刚刚对此进行了测试,如果我只使用sort(),如果第一项相等,则比较第二项。但如果我使用链接中的代码,情况并非如此。
猜你喜欢
  • 2011-09-14
  • 2020-10-27
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-17
相关资源
最近更新 更多