Converter dicionário para lista de coleção em C #

93

Tenho um problema ao tentar converter um dicionário em lista.

Exemplo se eu tiver um dicionário com string de modelo como chave e string como valor. Em seguida, desejo converter a chave do dicionário para a coleção da lista como uma string.

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(??????);
Edy Cu
fonte
5
Você está pedindo uma lista de chaves do dicionário? Nesse caso, há uma Propriedade de Chaves no Dicionário que fornecerá isso.
Brian Rasmussen

Respostas:

175

Para converter as chaves em uma lista própria:

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

Ou você pode encurtá-lo e nem mesmo se preocupar em usar select:

listNumber = dicNumber.Keys.ToList();
Justin Niessner
fonte
@Brian - Eu estava chegando lá na minha edição. Eu queria mostrar o método select primeiro, pois era isso que o OP perguntou e depois mostrar a alternativa. :-)
Justin Niessner
Então eu percebi, então removi meu comentário.
Brian Rasmussen
1
isso foi realmente útil. Eu precisei aplicar .Where (...) ao dict antes de retornar as chaves, mas esse método não retorna um dicionário, então não pude acessar a propriedade Keys. usando este select depois de onde funcionou bem
Martín Coll
22

Alternativamente:

var keys = new List<string>(dicNumber.Keys);
Stuartd
fonte
4
Trabalhar com o .NET Compact Framework 2.0 (sem o Linq) foi a melhor opção para mim.
Michael Murphy
Se você não pode usar o LINQ, esta opção parece a melhor.
user2000950
17

Se você quiser usar o Linq, poderá usar o seguinte snippet:

var listNumber = dicNumber.Keys.ToList();
Pop Catalin
fonte
9

Se você deseja converter chaves:

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

senão, se você deseja converter valores:

List<string> listNumber = dicNumber.Values.ToList();
daniele3004
fonte
Isso funcionará, mas pode não estar na ordem que você espera, até mesmo o dict foi ordenado por teclas antes, dict.Values ​​não é ...
BooNonMooN
4
foreach (var item in dicNumber)
{
    listnumber.Add(item.Key);
}
explorador
fonte
Por que não no final :)
Arman McHitarian
3

Se você deseja passar a coleção de chaves do Dicionário para um argumento de método.

List<string> lstKeys = Dict.Keys;
Methodname(lstKeys);
-------------------
void MethodName(List<String> lstkeys)
{
    `enter code here`
    //Do ur task
}
uma corrida
fonte