2012-09-13 2 views
2

키를 둘 위치를 선택할 수 있습니다.사전 <int, Dictionary <int, int>>을 구현하고 있습니까?

Dictionary<key1, Dictionary<key2, int>> 
Dictionary<key2, Dictionary<key1, int>> 

키 1 일 내가 최고 속도를 얻기 위해 구현해야

키 2

보다 작은 32 배속 경우?

상관 없습니까?

구현하는 더 좋은 방법은 무엇입니까?

+6

에 대한 튜플 또는 구조체는 무엇을 구현하는 방법? 너 뭐하려고? – spender

+2

두 가지 방법으로 시도하고 측정하십시오. :) – verdesmarald

+0

@spender, 2 개의 키가 필요한 빠른 검색 사전 구현 – Fredou

답변

1

주위를 노는 후 나는이 해결책으로 갔다.

int[,][] myDict; 
대신

Dictionary<int, Dictionary<int, int>> myDict; 

또는 두 키

+0

그래서 당신의 키는 인접한 'int'입니다. 당신은 그렇게 말하지 않았습니다. 그리고 32x 크기의 차이점과 어떻게 비슷한가? –

+0

@HenkHolterman, 그들은 인접하지 않지만 패턴, enum 플래그가 있습니다. 내 솔루션에는 메모리 비용이 있지만 중요한 것은 속도입니다.이 경우에는 이길 수 있습니다. – Fredou

2

아마 당신은 복합 키를 구현하여 최상의 성능을 얻을 :

struct Key { key1; key2; } 

Equals과에 대한 GetHashCode (더 나은 아직 IEquatable<Key> 인터페이스)를 구현합니다.

이 패턴을 사용하면 하나의 사전과 하나의 해시 검색 만 필요합니다.

+0

64 비트 코드로 실행 중이며 2 개의 int32 인 경우 전체 구조체가 64 비트가됩니까? equals와 gethashcode를 구현할 필요가 있습니까? – Onkelborg

+0

예, 아마도 끔찍하기 때문에 기본 구현을 사용하고 싶지 않을 것입니다. Resharper를 사용한다면'alt-ins '을 사용하여 3 초 안에 함수를 코드화 할 수 있습니다. – usr

+0

나는 오늘 나중에 이것을 시험해보고 다음과 같은 차이점을 보게 될 것이다. – Fredou

관련 문제