¿Qué debo hacer para ordenar en orden descendente, un List<Tuple<int, int>>
utilizando el primer elemento de la tupla como el valor que determina el pedido? Tiene que estar en el lugar y solo sé cómo hacerlo usando LINQ que devuelve una nueva lista.Lista de clasificación <Tuple <int, int>> in situ
Respuesta
Sólo tiene que proporcionar una IComparer<Tuple<int, int>>
o una Comparison<Tuple<int, int>>
al método 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 usted quiere pedir por el primer valor y luego el segundo valor, se vuelve un poco más complicado, pero todavía factible. Por ejemplo:
list.Sort((x, y) => {
int result = y.Item1.CompareTo(x.Item1));
return result == 0 ? y.Item2.CompareTo(x.Item2) : result;
});
EDITAR: He modificado lo anterior para ordenarlo en orden descendente. Tenga en cuenta que la forma correcta de hacerlo es invertir el orden de la comparación (y a x en lugar de xay). Debe no solo negar el valor de retorno de CompareTo
- esto fallará cuando CompareTo
devuelva int.MinValue
.
¿Por qué no esto?
List<Tuple<int, int>> list = ...
list = list.OrderBy(i => i.Item1).ToList();
Sí, crea una nueva lista, pero estoy interesado, ¿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 es así?
¿Quizás porque no es un tipo de lugar? –
@Martinho: Sí, no lo es. Edité mi publicación para aclarar mis preguntas. – abatishchev
¿'Tuple
¿Has mirado el método List<T>.Sort
? Se puede utilizar una sobrecarga que lleva un delegado o un Comparison<T>
IComparer<T>
:
list.Sort((x,y)=> x.Item1.CompareTo(y.Item1));
var listSort = from element in list orderby element.Item1 element.Item2 select element;
- 1. IList <int> vs Lista <int>
- 2. lista <int> convertir a int []
- 3. Lista de clasificación <String[]>
- 4. Clasificación Lista <String> en C#
- 5. convertir IQueryable <int> a <int>
- 6. C# Expandir lista plana <T> al diccionario <T, ICollection <int>>
- 7. Cómo convertir System.Linq.Enumerable.WhereListIterator <int> en la lista <int>?
- 8. Lista <int> en C#
- 9. Tuple <int, int> versus int [2] uso de memoria
- 10. C# ordenando una Lista <> usando Tuple?
- 11. Lista de clasificación <T> usando cadena sin Linq
- 12. gridview lista desplegable se unen a la lista <KeyValuePair <int, string>>
- 13. Cómo convertir la lista <string> en la lista <int>?
- 14. Cast lista <int> a la lista <string> en .NET 2.0
- 15. convertir lista <int> a la lista <long>
- 16. Ordenar un Dictionary <int, Lista <int>> mediante las teclas + valores de lista dentro de
- 17. Acción <T> o Acción <in T>?
- 18. Convertir la lista <MyObject> al Diccionario <obj.string, Lista <obj.ID>>
- 19. Lista de llenado <int> usando LINQ
- 20. Lista <Object> vs Lista <dynamic>
- 21. Lista <?> o Lista <Object>
- 22. Lista <Object> y lista <?>
- 23. .Net 4: forma fácil de crear dinámicamente List <Tuple<...>> resultados
- 24. ¿Cómo creo una lista <T> de una SortedList <int, T>?
- 25. map <int,int> valores predeterminados
- 26. Convierte IEnumerable <int> en int []
- 27. convertir un IOrderedEnumerable <KeyValuePair <string, int>> en un diccionario <string, int>
- 28. Agregar elementos a un diccionario <int, List <int>>
- 29. ¿Cuál es el equivalente de map <int, vector <int>> en Python?
- 30. C# Converting List <int> en la lista <double>
¿No es esa clasificación en orden ascendente? – BobTurbo
@BobTurbo: Bien manchado. Arreglará. –
De acuerdo con las tuplas de fuentes de referencia, el comparador predeterminado se puede comparar por Item1 y luego Item2. http://referencesource.microsoft.com/#mscorlib/system/tuple.cs, 189 – ShitalShah