Правильный способ сортировки списка нескольких объектов? - PullRequest
1 голос
/ 14 февраля 2011

У меня есть список класса, который имеет заголовок (строка), ранг (int) и несколько других строковых элементов. Я хотел бы иметь возможность отсортировать список так, чтобы я мог отсортировать весь бит по рангу.

Например:

 Title              Rank              Bla1        Bla2
 ---------------------------------------------------------
 Whatever            0                Bla         Blabety Bla
 Something Else      4                Bla2        Double Bla
 Howdy               1                Bla3        asdf
 Last                2                Bla4        fdsa

становится:

 Title              Rank              Bla1        Bla2
 ----------------------------------------------------------
 Something Else      4                Bla2        Double Bla  
 Last                2                Bla4        fdsa      
 Howdy               1                Bla3        asdf
 Whatever            0                Bla         Blabety Bla

Вот объявление класса:

public class Results
{
    public string title { get; set; }
    public int rank { get; set; }
    public string term { get; set; }
    public string studentComment { get; set; }
}

И объявление списка:

public List<Results> studentList = new List<Results>();

Как мне взять studentList и отсортировать его по рангу, чтобы получить результаты, показанные выше?

Заранее спасибо!

Ответы [ 6 ]

3 голосов
/ 14 февраля 2011

Вы можете использовать метод List<T>.Sort():

studentList.Sort( (a,b) => b.Rank.CompareTo(a.Rank) );

Сравнение b с здесь в отличие от a с b даст вам нисходящий порядок (например, с 4 по 0).

3 голосов
/ 14 февраля 2011

Я бы использовал метод LINQ OrderBy или OrderByDescending примерно так:

var orderedList = studentList.OrderByDescending(item=>item.rank);

Edit:

Если вы хотите вернуть тип List, просто используйте метод .ToList ():

var orderedList = studentList.OrderByDescending(item=>item.rank).ToList();
2 голосов
/ 14 февраля 2011
public List<Results> studentList = new List<Results>();
...
studentList.Sort((student1, student2) => student1.Rank.CompareTo(student2.Rank));

Это делает сортировку на месте студентов.Студенты сравниваются с использованием анонимной функции, переданной методу Sort (выражается как лямбда-выражение).

1 голос
/ 14 февраля 2011

Лямбда-выражения на помощь!

studentList.OrderByDescending(p => p.rank).ToList();
0 голосов
/ 14 февраля 2011

Вы можете заставить свой класс Results реализовать интерфейс IComparer и использовать SortedList вместо списка.

0 голосов
/ 14 февраля 2011

Пусть класс Results реализует IComparable, а затем реализует метод:

public int CompareTo(Results other)
{
    return (other.rank - rank);
}

Вызов studentList.Sort () теперь будет правильно сортировать ваш список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...