IT story

사전 또는 KeyedCollection?

hot-time 2020. 12. 25. 09:32
반응형

사전 또는 KeyedCollection?


나는 클래스 (이 SomeClass속성 포함) Namestring유형입니다. 그리고 그 클래스의 배열을 저장하고 이름으로 항목을 찾아야합니다. 이를 위해 두 가지 유형의 컬렉션이 있습니다 : KeyedCollectionDictionary. 내 질문은 : 그것은 사용하는 것이 좋습니다 그들 사이와 같은 경우에 어떤 차이 KeyedCollectionDictionary? 설명에 도움을 주셔서 감사합니다.


이전 주석은 둘 사이의 가장 중요한 차이점을 해결하지 않습니다. KeyedCollection은 항목이 추가 된 순서대로 항목을 유지합니다 (첫 번째 추가 된 항목은 인덱스 0에 있고 마지막으로 추가 된 항목은 마지막 인덱스에 있음). 사전은 그렇지 않습니다 (또는 적어도 그렇게 보장 할 수 없습니다).

KeyedCollection의이 추가 이점은 성능 비용이 적습니다. 내부적으로 사전과 목록을 유지하는 데 드는 비용을 지불합니다.


다음은 Dictionary와 KeyedCollection의 차이점에 대한 좋은 설명입니다. http://geekswithblogs.net/NewThingsILearned/archive/2010/01/07/using-keyedcollectionlttkey-titemgt.aspx

주요 포인트는 다음과 같습니다.

  • KeyedCollection은 추상적이므로 직접 사용할 수 없습니다.
  • KeyedCollection은 키가 엔터티 자체에있는 경우 컬렉션 구현 내에서 키 검색을 캡슐화 할 수있는 경우에 유용합니다.
  • KeyedCollection에 대한 일반적인 구현 (프레임 워크에는 없음)이있어 컬렉션 생성자에 키 검색 대리자를 붙여 넣을 수 있으므로 항목을 추가 할 때마다 반복 할 필요가 없습니다.

KeyedCollection은 변경 가능한 키와 키 변경을 관리하는 방법을 허용합니다. 사전은 키 변경을 허용하지 않습니다. 둘째, 조회가 필요한 컬렉션이있는 경우 엔터티에서 키를 추출하는 논리는 한곳에 남아 있습니다. 반면에 사전을 유지 관리하려면 사전에서 항목이 추가 / 제거되는 각 위치에 키 추출 논리를 배치해야합니다.


기본적으로 KeyedCollection은 내부에 사전을 만듭니다.
Key가 Value의 일부로 의미를 가지며 고유성을 정의하는 경우 이것이 KeyedCollection의 목적입니다.

사전 백업을 수정하려면이 ctor를 사용하십시오.

protected KeyedCollection(
IEqualityComparer<TKey> comparer,
int dictionaryCreationThreshold)

KeyedCollection키가 항목 자체에있을 때 A를 사용해야합니다.

기본적으로 KeyedCollectionA는 Collection<TItem>사전 주위에 래퍼. 작은 컬렉션을 사용하거나 항목을 직접 검색하는 것을 선호하는 경우 KeyedCollection 에서는dictionaryCreationThreshold 전환 할 컬렉션 수를 나타내는 매개 변수를 사용 하는 생성자제공합니다Dictionary .
의 또 다른 측면은 KeyedCollection유형이 일치하는 한 키 속성을 전환하도록 선택할 수 있다는 것입니다. 이것은 이중 키 항목 등에 유용 할 수 있습니다. 성능 측면에서는 여러 KeyedCollection인스턴스 를 생성 하거나 정말 큰 컬렉션을 사용 하는 경우를 제외하고 사전을 래핑하는 데 많은 오버 헤드가 있다고 생각하지 않습니다 (존재 null여부를 결정하기위한 내부 검사가 있습니다). 사전).
내가보고 싶은 한 가지는 KeyedCollectionunabstract하지만 일반적인 콘크리트 유형을 쉽게 만들 수 있습니다.


추상적이기 때문에 KeyedCollection을 사용할 수 없습니다 : http://msdn.microsoft.com/en-us/library/ms132438.aspx . 이것은 당신이 그것의 객체를 만들 수 없다는 것을 의미합니다.

참조 URL : https://stackoverflow.com/questions/7566657/dictionary-or-keyedcollection

반응형