web-dev-qa-db-fra.com

Comment trier une liste <> par un entier stocké dans la structure ma liste <>

Je dois trier un fichier de scores élevés pour mon jeu que j'ai écrit.

Chaque highscore a une variable Nom, Score et Date. Je stocke chacun dans une liste.

Voici la structure qui contient chaque donnée de meilleurs scores.

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

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

Alors, comment pourrais-je trier une liste de type Highscores par la variable score de chaque objet de la liste?

Toute aide est appréciée: D

18
Lucidity

Je ne sais pas pourquoi tout le monde propose des solutions basées sur LINQ qui nécessiteraient de la mémoire supplémentaire (d'autant plus que Highscore est un type de valeur) et un appel à ToList () si l'on souhaite réutiliser le résultat. La solution la plus simple consiste à utiliser la méthode de tri intégrée d'une liste.

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

Cela va trier la liste en place.

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

ou utilisez OrderByDescending pour trier de manière opposée

5
Stecya

Utilisez LINQ:

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

Ici est une excellente ressource pour en savoir plus sur les différents opérateurs LINQ.

1
Oded
List<Highscore> mylist = GetHighScores();

var sorted = mylist.OrderBy(h=>h.Score);
0
Steve B

Cela va trier la liste avec les meilleurs scores en premier:

IEnumerable<Highscore> scores = GetSomeScores().OrderByDescending(hs => hs.Score);
0
Fredrik Mörk