Подтвердить что ты не робот

Сортировка массива элементов с помощью OrderBy <>

У меня есть массив элементов, и я хотел бы сортировать по одному из их свойств. Я могу получить доступ к свойству items, используя "item.Fields [" FieldName "]. Значение" свойство возвращается как строка, но я могу применить его к int.

Я посмотрел на OrderBy < > но я понятия не имею, как его использовать.

4b9b3361

Ответ 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 < > .