Как отсортировать список по 2-му элементу кортежа в Python и C # - PullRequest
9 голосов
/ 26 мая 2010

У меня был список кортежей, где каждый кортеж состоит из двух целых чисел, и я хотел отсортировать по 2-му целому числу. После просмотра справки по Python я получил это:

sorted(myList, key=lambda x: x[1])

что отлично. У меня вопрос, есть ли такой же краткий способ сделать это в C # (язык, на котором я должен работать)? Я знаю очевидный ответ, связанный с созданием классов и указанием анонимного делегата для всего шага сравнения, но, возможно, есть и ориентированный на linq способ. Заранее спасибо за любые предложения.

Ответы [ 2 ]

14 голосов
/ 26 мая 2010

Еще один способ сделать это в Python - это

from operator import itemgetter
sorted(myList, key=itemgetter(1))
6 голосов
/ 26 мая 2010

Предполагая, что список кортежей имеет тип IEnumerable<Tuple<int, int>> (последовательность кортежей, представленных с использованием класса Tuple<..> из .NET 4.0), вы можете написать следующее, используя методы расширения LINQ:

var result = myList.OrderBy(k => k.Item2);

В коде k.Item2 возвращает второй компонент кортежа - в C # это свойство (поскольку доступ к элементу по индексу вообще не является безопасным для типов). В противном случае, я думаю, что код довольно лаконичен (также благодаря хорошей записи лямбда-функции).

Используя синтаксис запроса LINQ, вы могли бы написать его так (хотя первая версия ИМХО более читабельна и определенно более краткая):

var result = from k in myList orderby k.Item2 select k;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...