LINQ ToDictionary와 ToLookup의 차이점은 무엇입니까?


123

LINQ ToDictionary와 ToLookup의 차이점은 무엇입니까? 그들은 같은 일을하는 것 같습니다.

답변:


176

사전은 1 : 1 맵 (각 키가 단일 값에 매핑 됨)이며 사전은 사실 후에 변경 가능 (편집 가능)됩니다.

조회는 일대 다 맵 (다중 맵, 각 키가 해당 키가 IEnumerable<>있는 값 중 하나 에 매핑 됨 )이며 ILookup<,>인터페이스에 돌연변이가 없습니다 .

참고로, 존재하지 않는 키에 대한 조회 (인덱서를 통해)를 쿼리 할 수 ​​있으며 빈 시퀀스가 ​​표시됩니다. 사전도 똑같이하면 예외가 발생합니다.

그렇다면 각 키를 공유하는 레코드는 몇 개입니까?

지나치게 단순화 된 방법은 a Lookup<TKey,TValue>가 a 와 거의 비슷 하다는 것 입니다 .Dictionary<TKey,IEnumerable<TValue>>


5
또한 groupby와 다소 유사합니까?
Carlo V. Dango 2011

7
표준 계약의 누락 된 키 부분에 대해 빈 시퀀스를 반환하는 조회 동작 ILookup<,>이거나 KeyNotFoundException. 수신의 구현은 을 던졌습니다 KeyNotFoundException.
Lukazoid

누구에게나 도움이되는 경우 : Dictionary<TKey, IEnumerable<TValue>>목록의 사전으로 설명 될 수 있습니다. 이렇게 ToLookup()말하는 것과 같습니다 : 목록 사전을주세요. 어떤 이유에서인지 그 설명을 들으면 머릿속에 똑바로 들어가는 데 도움이되었습니다.
Nate Cook

-4

ToDictionary는 <TKey, TValue>이고 ToLookup <TKey, T1, T2, T3, ...>는 IGrouping과 비슷하지만 열거는 메모리에 남아 있습니다.


3
으로 무엇을 설명하려고하는지 잘 모르겠습니다 T1, T2, T3, .... ToLookup과 ToDictionary (메서드 자체)는 거의 동일한 API를 가지고 있습니다
Marc Gravell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.