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.