Преобразование словаря в коллекцию списков в 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();

Это будет работать, но может быть не в том порядке, в котором вы ожидаете, даже dict был упорядочен ключами раньше, dict.Values ​​is not ...
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.