Преобразование словаря в коллекцию списков в C #

95

У меня проблема при попытке преобразовать словарь в список.

Пример, если у меня есть словарь со строкой шаблона в качестве ключа и строкой в ​​качестве значения. Затем я хочу преобразовать ключ словаря в коллекцию списков в виде строки.

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
Вы просите список ключей из словаря? Если это так, в словаре есть свойство ключей, которое даст вам это.
Брайан Расмуссен

Ответы:

179

Чтобы преобразовать ключи в собственный список:

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

Или вы можете сократить его и даже не использовать select:

listNumber = dicNumber.Keys.ToList();
Джастин Нисснер
источник
@Brian - Я добирался туда в своей редакции. Я хотел сначала показать метод выбора, поскольку именно об этом спрашивал ОП, а затем показать альтернативу. :-)
Джастин Нисснер
Я решил, что удалил свой комментарий.
Брайан Расмуссен
1
это было действительно полезно. Мне нужно было применить .Where (...) к dict перед возвратом ключей, но этот метод не возвращает словарь, поэтому я не мог получить доступ к свойству Keys. используя этот выбор после того, где отлично поработали
Мартин Колл
23

Альтернативно:

var keys = new List<string>(dicNumber.Keys);
Стюарт
источник
4
Для меня это был лучший вариант для работы с .NET Compact Framework 2.0 (без Linq).
Майкл Мерфи
Если вы не можете использовать LINQ, этот вариант кажется лучшим.
user2000950
17

Если вы хотите использовать Linq, вы можете использовать следующий фрагмент:

var listNumber = dicNumber.Keys.ToList();
Поп-каталин
источник
10

Если вы хотите преобразовать ключи:

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

иначе, если вы хотите преобразовать значения:

List<string> listNumber = dicNumber.Values.ToList();
daniele3004
источник
Это будет работать, но может быть не в том порядке, в котором вы ожидаете, даже dict был упорядочен ключами раньше, dict.Values ​​is not ...
BooNonMooN
5
foreach (var item in dicNumber)
{
    listnumber.Add(item.Key);
}
исследователь
источник
Почему не в конце :)
Арман Макхитарян
3

Если вы хотите передать коллекцию ключей словаря в один аргумент метода.

List<string> lstKeys = Dict.Keys;
Methodname(lstKeys);
-------------------
void MethodName(List<String> lstkeys)
{
    `enter code here`
    //Do ur task
}
Арун
источник