Сортировка массива элементов с помощью OrderBy <>
У меня есть массив элементов, и я хотел бы сортировать по одному из их свойств.
Я могу получить доступ к свойству items, используя "item.Fields [" FieldName "]. Значение" свойство возвращается как строка, но я могу применить его к int.
Я посмотрел на OrderBy < > но я понятия не имею, как его использовать.
Ответы
Ответ 1
Чтобы быть ясным, OrderBy
не будет сортировать массив на месте - он вернет новую последовательность, которая является отсортированной копией массива. Если это хорошо, тогда вы хотите что-то вроде:
var sorted = array.OrderBy(item => item.Fields["FieldName"].Value);
С другой стороны, я не понимаю вашего комментария, что свойство возвращается как строка, но вы можете передать его в int - вы не можете передавать строки в ints, вы должны их проанализировать. Если это то, что вы имели в виду, вы, вероятно, захотите:
var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));
Если вы хотите, чтобы это как массив, вы можете вызвать ToArray()
после:
var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value))
.ToArray();
В качестве альтернативы вы можете использовать Array.Sort
, если хотите сортировать на месте, но это будет несколько грязнее.
Ответ 2
Используйте метод Сортировка для сортировки массива:
Array.Sort(theArray, (a, b) => String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value));
Если вы не используете С# 3, вы используете делегат вместо выражения лямбда:
Array.Sort(theArray, delegate(Item a, Item b) { return String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value); } );
(Это также работает с каркасом 2, которого расширение OrderBy не делает.)
Ответ 3
Если вы можете использовать orderby, это должно быть легко, попробуйте следующее. Я бросил int.Parse, хотя в зависимости от того, как вы действительно хотите сортировать, это может не потребоваться.
var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));
Ответ 4
var sortedArray = items.OrderBy(i => i.property).ToArray();
Если вам не нужен массив, вы можете оставить это, в этом случае у вас будет элемент типа IEnumerable < > .