Перетворити словник на колекцію списків на 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.