Soru Genel bir liste olarak sözlük değerleri nasıl alınır?


Sadece sözlük değerlerinden bir liste almak istiyorum ama göründüğü kadar basit değil!

burada kod:

Dictionary<string, List<MyType>> myDico = GetDictionary();
List<MyType> items = ???

Denerim :

List<MyType> items = new List<MyType>(myDico.values)

Ama bu çalışmıyor :-(


44
2017-09-26 13:19


Menşei


Hangi şekilde işe yaramaz? Bir hata mı alıyorsun? - jlew
Sözlük, eşlenen anahtarların topluluğudur List<MyType> nesneler. Yani çok var List<MyType>sözlükte. Bütün bu listeleri düzleştirmek için çalışıyorsun MyTypetek bir içine mi? - BoltClock♦
Bir liste listesi doldurmak için sözlük boyunca bir döngü çalıştırmak - oldukça basit görünüyor - bunu yaparken bir adım yolu var mı bilmiyorum. - BKSpurgeon


Cevaplar:


Elbette, myDico.Values List<List<MyType>>.

Listelerinizi düzleştirmek istiyorsanız Linq kullanın

var items = myDico.SelectMany (d => d.Value).ToList();

33
2017-09-26 13:23



Aslında Values olabilir Dictionary<string, List<MyType>>.ValueCollection. - svick
Neden böyle uygulandığını bilen var mı? Java'da olduğu gibi myDico.Values ​​tarafından döndürülen List <List <MyType >> öğesinin daha anlamlı olmasını sağlar - ya da bir şeyi özlüyorum mu? - Holly


Nasıl hakkında:

var values = myDico.Values.ToList();

41
2017-11-15 16:25



Neden bu daha fazla upvotes almaz? - J. Chang
@ J.Chang, bu değerleri düzleştirmez, dic.Values.ToList() sen gen olacak List<List<MyType>> ve bir düz liste değil. Bu sadece her tuştaki tek bir değer için geçerlidir. - Kaitiff


Başka bir varyant:

    List<MyType> items = new List<MyType>();
    items.AddRange(myDico.values);

25
2017-09-26 06:09



Gerçekten soruyu okumadan ne kadar upvotes alabilirsiniz görmek için şaşırtıcı. Buraya geldiğim soruya cevap vermene rağmen, OP aslında başka bir şey sordu. Dictionary içeren Lists). - lex82


Büyük olasılıkla tüm listeleri Values tek bir listeye:

List<MyType> allItems = myDico.Values.SelectMany(c => c).ToList();

24
2017-09-26 13:22





Benim OneLiner'ım:

var MyList = new List<MyType>(MyDico.Values);

7
2017-11-09 00:20



OP tarafından belirtildiği gibi, it does not work. - Neolisk
Benim için iyi çalıştı! Teşekkürler. - Ocean Airdrop
Bu sözlükteki listeleri bir liste halinde düzleştirmez, sanırım. - lex82
Benim için çalıştı, millet için daha kötü sonuçlara üzüldüm. Bu berbat. Umarım bunlardan biri sizin için çalışır! - Le Mot Juiced


Sözlüğünüzdeki bir veya daha fazla liste boşsa, Slaks'in cevabına daha fazla gitme, System.NullReferenceException çağırırken atılacak ToList(), güvenli oyna:

List<MyType> allItems = myDico.Values.Where(x => x != null).SelectMany(x => x).ToList();

1
2018-05-11 09:41





Bunu kullan:

List<MyType> items = new List<MyType>()
foreach(var value in myDico.Values)
    items.AddRange(value);

Sorun, sözlüğünüzdeki her anahtarın örnek olarak bir değer listesi olmasıdır. Aşağıdaki örnekte olduğu gibi, her anahtarın değer olarak tam olarak bir örneği olması durumunda kodunuz çalışır:

Dictionary<string, MyType> myDico = GetDictionary();
List<MyType> items = new List<MyType>(myDico.Values);

0
2017-09-26 13:21





        List<String> objListColor = new List<String>() { "Red", "Blue", "Green", "Yellow" };
        List<String> objListDirection = new List<String>() { "East", "West", "North", "South" };

        Dictionary<String, List<String>> objDicRes = new Dictionary<String, List<String>>();
        objDicRes.Add("Color", objListColor);
        objDicRes.Add("Direction", objListDirection);

0
2018-05-13 10:28





Ayrıca kullanabileceğiniz başka bir varyasyon

MyType[] Temp = new MyType[myDico.Count];
myDico.Values.CopyTo(Temp, 0);
List<MyType> items = Temp.ToList();

0
2018-02-04 16:18