itsource

Lookup()과 Dictionary(Of list)의 차이점

mycopycode 2023. 4. 7. 21:16
반응형

Lookup()과 Dictionary(Of list)의 차이점

저는 어떤 데이터 구조가 가장 효율적인지, 어떤 구조를 언제 어디에 사용해야 하는지에 대해 고민하고 있습니다.

요?ILookup(of key, ...) 와 다르다Dictionary(of key, list(of ...))

, 「 」 「 」 「 」 「 」 「 」 「 」 「 」는 하는가.ILookup프로그램 속도/메모리/데이터 액세스 등에 있어서 어느 쪽이 더 효율적일까요?

두 가지 중요한 차이:

  • Lookup불변의 존재입니다. 콘크리트는 있습니다.)Lookup하며, '클래스'는ILookup인터페이스는 변환 멤버를 제공하지 않습니다.물론 다른 가변 구현도 있을 수 있습니다.)
  • 빈됩니다.KeyNotFoundException)TryGetValue, AFAICR).

이 높으며, 시 율이동음음음음음음음음음음음음음음음음음음음음음 a a a a a a a a a a a a a a a a a를 사용할 수 Dictionary<TKey, GroupingImplementation<TValue>>★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★을 사용하다개인적으로 저는 룩업이 보통 더 적합하다는 것을 알게 되었습니다.Dictionary<TKey, List<TValue>>을 사용하다

상세를 , 인 실시를 알 수 .IGrouping<,>의 구현에 되는 표현입니다.IList<TValue>,, 는, 는, 를, with, with, with, with, with, with, with, with, with, with, with, with, with, with, with, with, with, with, with, , with,Count(),ElementAt()syslog.

흥미로운 점은 아무도 실제로 가장 큰 차이를 언급하지 않았다는 점이다(MSDN에서 직접 인용).

검색은 사전과 유사합니다.차이점은 사전은 키를 단일 값에 매핑하는 반면 룩업은 키를 값 모음에 매핑한다는 것입니다.

다.Dictionary<Key, List<Value>> a. a. a.Lookup<Key, Value>논리적으로 유사한 방식으로 정리된 데이터를 유지할 수 있으며 둘 다 같은 수준의 효율성입니다.주요 차이점은Lookup ""은 .Add()메서드 및 퍼블릭컨스트럭터 없음(Jon이 언급한 바와 같이 존재하지 않는 키를 예외 없이 쿼리하여 해당 키를 그룹화의 일부로 사용할 수 있습니다).

어느 쪽을 사용하느냐에 따라서는, 사용하는 방법에 따라 다릅니다. 키 , " " " " " " " " " " " " " " "Dictionary<Key, List<Value>>변형이 가능하기 때문에 아마 더 나을 것입니다.

그러나 일련의 데이터가 있고 키별로 정렬된 읽기 전용 보기만 원하는 경우 룩업은 매우 쉽게 구성되며 읽기 전용 스냅샷을 제공합니다.

아직 언급되지 않은 또 다른 차이점은 Lookup()이 늘키를 지원한다는 것입니다.

룩업 클래스는 ILookup 인터페이스를 구현합니다.검색은 여러 값을 동일한 키에 매핑할 수 있고 늘 키가 지원되는 점을 제외하고는 사전과 매우 유사합니다.

의 주요 차이점은ILookup<K,V>및 aDictionary<K, List<V>>사전이 변경 가능하다는 것입니다.키를 추가 또는 삭제하거나 조회된 목록에서 항목을 추가 또는 삭제할 수도 있습니다.ILookup는불변하며한번만생성되면변경할수없습니다.

두 메커니즘의 기본 구현은 같거나 비슷하므로 검색 속도와 메모리 설치 공간이 거의 동일합니다.

예외가 옵션이 아닌 경우 Lookup으로 이동합니다.

데이터센터와 같은 효율적인 구조를 원하신다면Dictionary하지만 입력에 중복된 키가 없다는 것은 확실치 않습니다.Lookup더 안전합니다.

다른 답변에서도 언급했듯이 null 키도 지원하며 임의의 데이터를 사용하여 쿼리할 때 항상 유효한 결과를 반환하므로 알 수 없는 입력에 대한 복원력이 높아 보입니다(예외가 발생하기 쉬운 사전보다 낮음).

그리고 특히나, 그것을 다른 것과 비교한다면,System.Linq.Enumerable.ToDictionary기능:

// won't throw
new[] { 1, 1 }.ToLookup(x => x); 

// System.ArgumentException: An item with the same key has already been added.
new[] { 1, 1 }.ToDictionary(x => x);

다른 방법으로는 자신의 중복된 키 관리 코드를foreachloopsyslog.syslog..syslog.

퍼포먼스에 관한 고려사항, 딕셔너리: 확실한 승자

을 관리할 , ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」Dictionary가 더

        Stopwatch stopwatch = new Stopwatch();
        var list = new List<string>();
        for (int i = 0; i < 5000000; ++i)
        {
            list.Add(i.ToString());
        }
        stopwatch.Start();
        var lookup = list.ToLookup(x => x);
        stopwatch.Stop();
        Console.WriteLine("Creation: " + stopwatch.Elapsed);

        // ... Same but for ToDictionary
        var lookup = list.ToDictionary(x => x);
        // ...

~로Lookup각를 유지할 에, Dictionary 약 )보다.

조회 속도: 작성: 00:00:01.5760444

사전 속도: 작성: 00:00:00.4418833

언급URL : https://stackoverflow.com/questions/13362490/difference-between-lookup-and-dictionaryof-list

반응형