사전 또는 KeyedCollection?
나는 클래스 (이 SomeClass
속성 포함) Name
의 string
유형입니다. 그리고 그 클래스의 배열을 저장하고 이름으로 항목을 찾아야합니다. 이를 위해 두 가지 유형의 컬렉션이 있습니다 : KeyedCollection
및 Dictionary
. 내 질문은 : 그것은 사용하는 것이 좋습니다 그들 사이와 같은 경우에 어떤 차이 KeyedCollection
와 Dictionary
? 설명에 도움을 주셔서 감사합니다.
이전 주석은 둘 사이의 가장 중요한 차이점을 해결하지 않습니다. 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를 사용해야합니다.
기본적으로 KeyedCollection
A는 Collection<TItem>
사전 주위에 래퍼. 작은 컬렉션을 사용하거나 항목을 직접 검색하는 것을 선호하는 경우 KeyedCollection
에서는dictionaryCreationThreshold
전환 할 컬렉션 수를 나타내는 매개 변수를 사용 하는 생성자 를 제공합니다Dictionary
.
의 또 다른 측면은 KeyedCollection
유형이 일치하는 한 키 속성을 전환하도록 선택할 수 있다는 것입니다. 이것은 이중 키 항목 등에 유용 할 수 있습니다. 성능 측면에서는 여러 KeyedCollection
인스턴스 를 생성 하거나 정말 큰 컬렉션을 사용 하는 경우를 제외하고 사전을 래핑하는 데 많은 오버 헤드가 있다고 생각하지 않습니다 (존재 null
여부를 결정하기위한 내부 검사가 있습니다). 사전).
내가보고 싶은 한 가지는 KeyedCollection
unabstract
하지만 일반적인 콘크리트 유형을 쉽게 만들 수 있습니다.
추상적이기 때문에 KeyedCollection을 사용할 수 없습니다 : http://msdn.microsoft.com/en-us/library/ms132438.aspx . 이것은 당신이 그것의 객체를 만들 수 없다는 것을 의미합니다.
참조 URL : https://stackoverflow.com/questions/7566657/dictionary-or-keyedcollection
'IT story' 카테고리의 다른 글
weak_ptr은 어떻게 작동합니까? (0) | 2020.12.25 |
---|---|
추가 된 Git 리포지토리에서 디렉터리 무시 (0) | 2020.12.25 |
콘솔 창에서 표준 출력을 인쇄하고 파일에 저장하도록 IntelliJ를 구성합니다. (0) | 2020.12.25 |
SVN에서 모든 지점 이름 가져 오기 (0) | 2020.12.25 |
속성을 요소의 XML 특성으로 직렬화 (0) | 2020.12.25 |