对列表<Tuple >进行排序
我将如何使用元组的第一个元素作为确定顺序的值,按降序排序,使用List<Tuple>
进行排序? 它必须是就地的,我只知道如何使用LINQ返回一个新列表。
您只需要向List
方法提供IComparer
或Comparison
。 后者可能更容易指定内联:
list.Sort((x, y) => y.Item1.CompareTo(x.Item1));
如果你想按第一个值和第二个值排序,它会变得有点棘手,但仍然可行。 例如:
list.Sort((x, y) => { int result = y.Item1.CompareTo(x.Item1); return result == 0 ? y.Item2.CompareTo(x.Item2) : result; });
编辑:我现在修改了上面的内容,按降序排序。 请注意,正确的方法是颠倒比较的顺序( y
到x
而不是x
到y
)。 你不能只是否定CompareTo
的返回值 – 当CompareTo
返回int.MinValue
时,这将失败。
为什么不呢?
List> list = ... list = list.OrderBy(i => i.Item1).ToList();
是的,它创建了一个新列表,但我只是感兴趣 – 为什么你不喜欢这个?
List> list = new List> { new Tuple(1,1), new Tuple(0,2), new Tuple(3,0) }; list.Sort(Comparer>.Default);
生产:
0,2 1,1 3,0
它是就地的,不是吗?
你看过List
方法了吗? 您可以使用带有Comparison
委托或IComparer
的重载:
list.Sort((x,y)=> x.Item1.CompareTo(y.Item1));
var listSort = from element in list orderby element.Item1 element.Item2 select element;