2011-06-21 11 views
17

Necesito ordenar un archivo de puntuación más alta para mi juego que he escrito.Cómo ordenar una lista <> por un entero almacenado en la estructura mi lista <> contiene

Cada puntuación más alta tiene una variable de Nombre, Puntuación y Fecha. Guardo cada uno en una lista.

Aquí está la estructura que contiene cada dato de alto puntaje.

struct Highscore 
{ 
    public string Name; 
    public int Score; 
    public string Date; 

    public string DataAsString() 
    { 
     return Name + "," + Score.ToString() + "," + Date; 
    } 
} 

Entonces, ¿cómo puedo ordenar una lista de Highscores por la variable de puntuación de cada objeto en la lista?

Cualquier ayuda se agradece: D

+0

Si realmente almacenó sus objetos en un ['List '] (http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx), hay un ['Sort()'] (http://msdn.microsoft.com/en-us/library/3da4abas.aspx) método ... –

Respuesta

46

No sé qué todo el mundo está proponiendo soluciones basadas LINQ que requieren memoria adicional (sobre todo porque Record es un tipo de valor) y una llame a ToList() si quiere reutilizar el resultado. La solución más sencilla es utilizar el método Sort incorporado en una lista

list.Sort((s1, s2) => s1.Score.CompareTo(s2.Score)); 

Esto ordenará la lista en su lugar.

+0

Dulce que hizo el truco :) – Lucidity

+0

+1 Dulce que hizo el truco :) – mjb

6
var sortedList = yourList.OrderBy(x => x.Score); 

o utilizar OrderByDescending ordenar en sentido contrario

1
List<Highscore> mylist = GetHighScores(); 

var sorted = mylist.OrderBy(h=>h.Score); 
2

uso de LINQ:

myScores.OrderBy(s => s.Score); 

Here es un gran recurso para aprender acerca los diferentes operadores LINQ.

1

Esto ordenará la lista con las puntuaciones más altas en primer lugar:

IEnumerable<Highscore> scores = GetSomeScores().OrderByDescending(hs => hs.Score); 
+0

Sin embargo, el resultado de llamar a 'OrderBy()' no es una lista. –

+0

@Jeff: ¡tienes razón, por supuesto! Editado, gracias :-) –

Cuestiones relacionadas