Перетворити словник на колекцію списків на C #


93

У мене проблема при спробі перетворити словник у список.

Приклад, якщо у мене є словник із рядком шаблону як ключем та рядком як значенням. Потім я хочу перетворити ключ словника на колекцію списків у вигляді рядка.

Dictionary<string, string> dicNumber = new Dictionary<string, string>();
List<string> listNumber = new List<string>();

dicNumber.Add("1", "First");
dicNumber.Add("2", "Second");
dicNumber.Add("3", "Third");

// So the code may something look like this
//listNumber = dicNumber.Select(??????);

5
Ви запитуєте список ключів зі словника? Якщо так, у словнику є властивість ключів, яка дасть вам це.
— Брайан Расмуссен,

Відповіді:


175

Щоб перетворити ключі у власний список:

listNumber = dicNumber.Select(kvp => kvp.Key).ToList();

Або ви можете скоротити його і навіть не турбуватися, використовуючи select:

listNumber = dicNumber.Keys.ToList();

@Brian - Я потрапляв туди у своєму редагуванні. Я хотів спершу показати метод select, оскільки саме про це запитував OP, а потім показати альтернативу. :-)
— Джастін Нісснер

Тож я зрозумів, тому видалив свій коментар.
— Брайан Расмуссен,

1
це було дуже корисно. Мені потрібно було застосувати .Where (...) до дикту перед поверненням ключів, але цей метод не повертає словник, тому я не міг отримати доступ до властивості Keys. використовуючи цей вибір після того, де чудово працював
— Мартін Колл

22

В якості альтернативи:

var keys = new List<string>(dicNumber.Keys);

4
Працюючи з .NET Compact Framework 2.0 (отже, не Linq), це був найкращий варіант для мене.
— Michael Murphy

Якщо ви не можете використовувати LINQ, цей варіант здається найкращим.
— user2000950

17

Якщо ви хочете використовувати Linq, тоді ви можете використовувати такий фрагмент:

var listNumber = dicNumber.Keys.ToList();

9

Якщо ви хочете конвертувати ключі:

List<string> listNumber = dicNumber.Keys.ToList();

в іншому випадку, якщо ви хочете перетворити значення:

List<string> listNumber = dicNumber.Values.ToList();

Це спрацює, але може бути не в тому порядку, як ви очікуєте, навіть дикт був замовлений ключами раніше, dict.Values ​​не ...
— BooNonMooN


3

Якщо ви хочете передати колекцію ключів словника в один аргумент методу.

List<string> lstKeys = Dict.Keys;
Methodname(lstKeys);
-------------------
void MethodName(List<String> lstkeys)
{
    `enter code here`
    //Do ur task
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.