programing

사전 값을 일반 목록으로 가져 오는 방법

yoursource 2021. 1. 16. 10:50
반응형

사전 값을 일반 목록으로 가져 오는 방법


사전 값에서 목록을 얻고 싶지만 표시되는 것처럼 간단하지 않습니다!

여기에 코드 :

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

나는 시도한다 :

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

하지만 작동하지 않습니다 :-(


물론 myDico.Values는 List<List<MyType>>.

목록을 평평하게 만들고 싶다면 Linq를 사용하십시오.

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

어때 :

var values = myDico.Values.ToList();

모든 목록을 Values단일 목록으로 병합 할 수 있습니다 .

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

또 다른 변형 :

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

내 OneLiner :

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

Slaks의 대답에 대해 더 나아가, 사전에있는 하나 이상의 목록이 null이면 , play safe를 System.NullReferenceException호출 할 때 a 가 발생 ToList()합니다.

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

이것을 사용하십시오 :

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

문제는 사전의 모든 키에 값으로 인스턴스 목록이 있다는 것입니다. 다음 예제와 같이 각 키에 정확히 하나의 인스턴스가 값으로 있으면 코드가 작동합니다.

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

        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);

사용할 수있는 또 다른 변형

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

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

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

참조 URL : https://stackoverflow.com/questions/7555690/how-to-get-dictionary-values-as-a-generic-list

반응형