Сортировать массив элементов, используя OrderBy <> - PullRequest
20 голосов
/ 07 марта 2009

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

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

Ответы [ 4 ]

42 голосов
/ 07 марта 2009

Чтобы было ясно, OrderBy не будет сортировать массив на месте - он вернет новую последовательность, которая является отсортированной копией массива. Если это нормально, тогда вы хотите что-то вроде:

var sorted = array.OrderBy(item => item.Fields["FieldName"].Value);

С другой стороны, я не понимаю вашего комментария о том, что свойство возвращается в виде строки, но вы можете привести его к типу int - вы не можете привести строки к целым, вы должны их проанализировать. Если это то, что вы имели в виду, вы, вероятно, хотите:

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, если вы хотите отсортировать на месте, но это будет несколько сложнее.

9 голосов
/ 07 марта 2009

Используйте метод Sort для сортировки массива:

Array.Sort(theArray, (a, b) => String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value));

Если вы не используете C # 3, вы используете делегат вместо лямбда-выражения:

Array.Sort(theArray, delegate(Item a, Item b) { return String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value); } );

(Это также работает с фреймворком 2, чего нет у расширения OrderBy.)

5 голосов
/ 07 марта 2009

Если вы можете использовать orderby, это должно быть легко, попробуйте следующее. Я добавил int.Parse, хотя в зависимости от того, как вы на самом деле хотите сортировать, это может не потребоваться.

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));
4 голосов
/ 07 марта 2009
var sortedArray = items.OrderBy(i => i.property).ToArray();

Если вам не нужен массив, вы можете отключить его, и в этом случае у вас будет IEnumerable <> типа элемента.

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