Получить алфавитный список предметов в коллекции, используя Lambda / Linq? - PullRequest
4 голосов
/ 21 января 2010

У меня есть список объектов. Каждый объект содержит свойство с именем «DisplayName».

Я хочу создать еще один список строковых объектов, где каждая строка представляет первую букву или символ (может быть числом) в свойстве DisplayName для всех объектов в начальном списке, и я хочу, чтобы список был отдельным. 1003 *

Так, например, если мой список содержал следующие три объекта:

(1) DisplayName = 'Anthony' (2) DisplayName = 'Dennis' (3) DisplayName = 'John'

Я бы хотел создать еще один список, содержащий следующие три строки:

(1) «А» (2) 'D' (3) 'J'

Есть идеи, как это сделать с минимальным кодированием с использованием лямбда-выражений или linq?

Ответы [ 3 ]

3 голосов
/ 21 января 2010

Как это:

list.Select(o => o.DisplayName[0].ToString())
    .Where(s => Char.IsLetter(s, 0))
    .Distinct().ToList();

Отредактировано

1 голос
/ 21 января 2010
List<myObject> mylist = new List<myObject>();
//populate list
List<string> myStringList = myList
    .Select(x => x.DisplayName.Substring(0,1))
    .Distinct()
    .OrderBy(y => y);

В приведенном выше коде Select (с его лямбдой) возвращает только первый символ из отображаемого имени объекта x. Это создает IEnumerable типа string, который затем передается в Distinct(). Это гарантирует, что у вас есть только уникальные элементы в списке. Наконец, OrderBy обеспечивает сортировку ваших элементов по алфавиту.

Обратите внимание, что если каждый из объектов в списке имеет разные типы, вы не сможете просто вызвать x.DisplayName. В этом случае я бы создал интерфейс, возможно, с именем IDisplayName, который реализует DisplayName. Тогда вы сможете использовать x => ((IDisplayName)x).DisplayName.Substring(0,1) в своей лямбде.

0 голосов
/ 21 января 2010

или в нотации запроса:

var stringList = (from a in objectList 
                      select a.DisplayName.Substring(0,1)).Distinct();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...