Список. Вид (Пользовательская сортировка …)

У меня есть Объект списка, который включает 3 объекта: Неравнодушный, Полный До H и Полный До O.

Я связываю этот список с asp OptionButtonList, и он сортирует его в алфавитном порядке. Однако я хочу отсортировать список как следующее:

Полный до H, неравнодушного, полного до O.

Как я могу выполнить это?

16
задан Alexei Levenkov 29 January 2016 в 00:43
поделиться

6 ответов

Linq отлично подходит для этого. Вы даже можете построить последовательность порядка, чтобы определять ее на лету, поскольку выполнение сортировки не выполняется до ToList .

 var sortedList = yourList.OrderBy(i => i.FullToH).
     ThenBy(i => i.Partial).
     ThenBy(i => i.FullToO).ToList();
25
ответ дан 30 November 2019 в 15:13
поделиться

Являются ли перечисленные вами элементы (например, FullToHo) просто строками? Если это так, то все, что вам нужно сделать, это написать метод для сравнения и сортировки с помощью этого метода.

public int CompareEntries(string left, string right) {
  const string fullToH = "Full To H";
  const string partial = "Partial";
  const string fullToO = "Full To O";
  if ( left == right ) {
    return 0;
  } else if ( left == fullToH ) {
    return -1;
  } else if ( left == fullToO ) {
    return 1;
  } else if ( right == fullToH ) {
    return 1;
  } else {
    return -1; 
  }
}

list.Sort(CompareEntries);
8
ответ дан 30 November 2019 в 15:13
поделиться

Реализуйте IComparer для своих объектов.

http://devcity.net/Articles/20/1/20020304.aspx

http://support.microsoft.com/kb/321292

3
ответ дан 30 November 2019 в 15:13
поделиться

Предположим, что ваш список не

 List<object> myList = new List<object>();

а что-то вроде

List<MyObjectClass> myList = new List<MyObjectClass>();

(где каждый элемент имеет один и тот же тип объекта)

Вы можете сделать вот что:

myList.Sort((firstObj, secondObj) =>
    {
        return firstObj.SomeProperty.CompareTo(secondObj.SomeProperty);
    }
);
3
ответ дан 30 November 2019 в 15:13
поделиться

Создайте Comparer для вашего пользовательского типа (который реализует интерфейс IComparer). Затем вы можете использовать его для сортировки списка:

List<CustomType> list = new List<CustomType>();

// Fill list
list.Sort(new CustomComparer());

Или, если вы используете более новую версию фреймворка и вам не нужно повторно использовать логику сортировки, вы можете использовать метод IEnumerable.OrderBy().

0
ответ дан 30 November 2019 в 15:13
поделиться

Спасибо всем за помощь!

Я сделал вот так:

List<string> sortedList = new List<string>();
sortedList = list.OrderBy(i => i.CodeValue == "FullToH").ThenBy(i => i.CodeValue == "Partial").ThenBy(i => i.CodeValue == "FullToO").ToList();

Затем привязал к sortedList!

14
ответ дан 30 November 2019 в 15:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: