Sözlüğü C # 'da liste koleksiyonuna dönüştür


98

Bir sözlüğü listeye dönüştürmeye çalışırken sorun yaşıyorum.

Anahtar olarak şablon dizesi ve değer olarak dizge olan bir sözlüğüm varsa örnek. Daha sonra sözlük anahtarını bir dizge olarak koleksiyon listesine dönüştürmek istiyorum.

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
Sözlükten anahtarların bir listesini mi istiyorsun? Eğer öyleyse, Dictionary'de size bunu sağlayacak bir Keys Özelliği var.
Brian Rasmussen

Yanıtlar:


182

Anahtarları kendi Listelerine dönüştürmek için:

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

Ya da kısaltabilir ve select'i kullanarak uğraşmayabilirsiniz:

listNumber = dicNumber.Keys.ToList();

@Brian - Düzenlememde oraya ulaşıyordum. İlk önce seçme yöntemini göstermek istedim çünkü OP'nin sorduğu buydu ve sonra alternatifi gösterdim. :-)
Justin Niessner

Bu yüzden düşündüm, bu yüzden yorumumu kaldırdım.
Brian Rasmussen

1
bu gerçekten yardımcı oldu. Anahtarları döndürmeden önce dikteye .Where (...) uygulamam gerekiyordu, ancak bu yöntem bir sözlük döndürmüyor, bu yüzden Keys özelliğine erişemedim. mükemmel çalıştığı yerden sonra bu seçimi kullanarak
Martín Coll

24

Alternatif olarak:

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

4
.NET Compact Framework 2.0 ile çalışmak (yani Linq yok) benim için en iyi seçenekti.
Michael Murphy

LINQ kullanamıyorsanız, bu seçenek en iyisi gibi görünüyor.
user2000950

17

Linq'i kullanmak istiyorsanız, aşağıdaki parçacığı kullanabilirsiniz:

var listNumber = dicNumber.Keys.ToList();

10

Anahtarları dönüştürmek istiyorsanız:

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

yoksa Değerleri dönüştürmek istiyorsanız:

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

Bu işe yarayacak, ancak beklediğiniz sırada olmayabilir, hatta dikte daha önce anahtarlar tarafından sipariş edilmiş olsa bile, dict. Değerler öyle değil ...
BooNonMooN

5
foreach (var item in dicNumber)
{
    listnumber.Add(item.Key);
}

Neden sonunda olmasın :)
Arman

3

Sözlük anahtarları koleksiyonunu tek bir yöntem bağımsız değişkenine geçirmek istiyorsanız.

List<string> lstKeys = Dict.Keys;
Methodname(lstKeys);
-------------------
void MethodName(List<String> lstkeys)
{
    `enter code here`
    //Do ur task
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.