List.Sort(пользовательская сортировка...)
У меня есть объект List, который включает в себя 3 элемента: Partial, Full To H и Full To O.
Я привязываю этот список к asp OptionButtonList и сортирую его в алфавитном порядке. Однако я хочу отсортировать список следующим образом:
Полный для H, частичный, полный для O.
Как я могу это сделать?
Ответы
Ответ 1
Linq отлично подходит для этого. Вы даже можете построить последовательность заказов до того, как она будет определена "на лету", так как выполнение сортировки не выполняется до ToList
.
var sortedList = yourList.OrderBy(i => i.FullToH).
ThenBy(i => i.Partial).
ThenBy(i => i.FullToO).ToList();
Ответ 2
Спасибо за помощь!
Я сделал это вот так:
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!
Ответ 3
Хорошо, я знаю, что это уже несколько лет, но у меня есть альтернативное решение, которое, я думаю, более элегантно, чем вышеупомянутые решения, которые будущие читатели могут захотеть рассмотреть:
В вашем классе:
static readonly List<String> codeValueSortOrder = new List<String> {
"Full To H",
"Partial",
"Full To O"
};
и в вашем методе:
sortedList = list.OrderBy(i=> codeValueSortOrder.IndexOf(i.CodeValue));
Ответ 4
Являются ли перечисленные вами элементы (например, 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);
Ответ 5
Внедрить IComparer для ваших объектов.
http://devcity.net/Articles/20/1/20020304.aspx
http://support.microsoft.com/kb/321292
Ответ 6
Предполагая, что ваш список не является
List<object> myList = new List<object>();
но вместо этого что-то вроде
List<MyObjectClass> myList = new List<MyObjectClass>();
(где каждый элемент имеет один и тот же тип объекта)
Вы можете сделать это:
myList.Sort((firstObj, secondObj) =>
{
return firstObj.SomeProperty.CompareTo(secondObj.SomeProperty);
}
);
Ответ 7
Создайте Comparer для вашего настраиваемого типа (который реализует интерфейс IComparer). Затем вы можете использовать это для сортировки списка:
List<CustomType> list = new List<CustomType>();
// Fill list
list.Sort(new CustomComparer());
Или, если вы используете более новую версию фреймворка и не нуждаетесь в повторном использовании логики сортировки, вы можете использовать метод IEnumerable<T>.OrderBy()
.