c# – 对元组列表进行排序时的默认行为是什么?

我想对List of Tuple< int,string>进行排序使用int值.在此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();

元素再次排序.

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

解决方法:

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

The Tuple<T1, T2>.IComparable.CompareTo method uses the default object comparer to compare each component.

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

上一篇:为什么Python中的元组可以反转但没有__reversed__?


下一篇:c# – 为什么元组在`[Serializable]`时没有无参数构造函数?