사전의 키와 값을 반대로하고 싶습니다. 저는 소스 사전 Dictionary<int, string>
에서 Dictionary<string, List<int>>
을 얻고 싶습니다. 값이 다른 키 아래에서 여러 번 소스 사전에있을 수 있기 때문에 List<int>
이 있습니다.사전에 키와 값을 역순으로 정렬하십시오.
예 : 도움을
{
"A": [1,2,3]
"B": [4,5]
"C": [6]
"D": [7]
}
감사 :
{
1: "A"
2: "A"
3: "A"
4: "B"
5: "B"
6: "C"
7: "D"
}
가 변환됩니다.
편집 :
OK, 나는이 알고리즘에 대해 조금 이해할 수 있었다 너희들의 도움으로. 이제 두 가지 가능한 솔루션을보고 (그 중에서도) 결과가 동일 해 보이는 것처럼 실제 차이점을 모릅니다.
성능 문제가 있습니까?
var byLookup = actions.ToLookup(pair => pair.Value, pair => pair.Key)
.ToDictionary(group => group.Key, group => group.AsEnumerable());
var byGroupBy = actions.GroupBy(pair => pair.Value, pair => pair.Key)
.ToDictionary(group => group.Key, group => group.AsEnumerable());
편집 2 :
내가이는이 간단한 것 기대하지 않았다 단지
var byLookup = actions.ToLookup(pair => pair.Value, pair => pair.Key)
사용하여 끝났다. 감사합니다.
var res = dict
.GroupBy(p => p.Value)
.ToDictionary(g => g.Key, g => g.Select(pp => pp.Key).ToList());
먼저 그룹 값에 의하여 :
당신이를 만들려고 사전에서 조회 하시겠습니까? 이 경우, ToLookup() 확장 메소드는 친구입니다. – Baldrick
@B ... 그걸 알아 내려고했지만, 모든 매개 변수와 오버로드로 GroupBy 메서드를 사용하지 못했습니다. – sidon
'var byLookup = actions.ToLookup (pair => pair.Value, pair => pair.Key)'만으로도 충분합니다. ToDictionary를 호출 할 필요는 없습니다. –