sort ordenar lista desc array arrange c# list sorting

c# - desc - Ordenar lista<Tuple<int, int>> in-place



order by list c# linq (4)

¿Cómo me ocuparía de ordenar en orden descendente, una List<Tuple<int, int>> usando el primer elemento de la tupla como el valor que determina el orden? Tiene que estar en el lugar y solo sé cómo hacerlo utilizando LINQ, que devuelve una nueva lista.



¿Por qué no esto?

List<Tuple<int, int>> list = ... list = list.OrderBy(i => i.Item1).ToList();

Sí, crea una nueva lista, pero solo me interesa, ¿por qué no te gusta esto?

List<Tuple<int, int>> list = new List<Tuple<int, int>> { new Tuple<int,int>(1,1), new Tuple<int,int>(0,2), new Tuple<int,int>(3,0) }; list.Sort(Comparer<Tuple<int, int>>.Default);

produce:

0,2 1,1 3,0

Y está en el lugar, ¿no?


Solo debe proporcionar un IComparer<Tuple<int, int>> o Comparison<Tuple<int, int>> a la List<T>.Sort . Este último es probablemente más fácil de especificar en línea:

list.Sort((x, y) => y.Item1.CompareTo(x.Item1));

Si desea ordenar por el primer valor y luego el segundo, se vuelve un poco más complicado, pero aún así es factible. Por ejemplo:

list.Sort((x, y) => { int result = y.Item1.CompareTo(x.Item1); return result == 0 ? y.Item2.CompareTo(x.Item2) : result; });

EDITAR: Ahora he enmendado lo anterior para ordenar en orden descendente. Tenga en cuenta que la forma correcta de hacerlo es invertir el orden de la comparación ( y a x lugar de x a y ). No solo debe negar el valor de retorno de CompareTo ; esto fallará cuando CompareTo devuelva int.MinValue .


var listSort = from element in list orderby element.Item1 element.Item2 select element;