2016-08-02 2 views
0

여러 개의 키를 사용하여 액세스 할 수있는 개체 집합이 있는데이 개체를 메모리에 나타내려면 어떤 구조를 사용해야합니까? 필요한 유일한 작업은 키를 제공하는 값을 반환하는 파인더입니다. 예를 들어다 대일 매핑을 나타 내기 위해 어떤 데이터 구조를 사용해야합니까?

:

key: {"a","aa","aaa"}, value {1} 
key: {"b","bb","bbb"}, value {2} 
key: {"c","cc","ccc"}, value {3} 

I는 다음과 같이 사용합니다 :

MyStruct.Get["a"]; // return 1 
MyStruct.Get["aa"]; // return 1 
MyStruct.Get["bbb"]; // return 2 
MyStruct.Get["d"]; // return null 
+0

제 생각에 클래스 라이브러리에는 존재하지 않습니다. 자신 만의 구조를 쉽게 만들 수 있습니다. 열쇠의 순서가 중요합니까? 그것을 염두에 두십시오 ... –

+0

열쇠의 순서는 중요하지 않습니다, 미리 만들어진 구조가 없습니까? 자바에서는 HashMap이있다. – Bill

+0

첫 번째 키에서 "aaa"를 의미한다고 생각합니다. –

답변

2

당신은 Dictionary를 사용해야합니다.

Dictionary<string, int> myDict = new Dictionary<string, int>(); 
myDict.Add("a", 1); 
myDict.Add("aa", 1); 
myDict.Add("c", 3); 

int result; 
if (myDict.TryGetValue("a", out result)){ 
    //do something with result 
} 

을 또는이 같은 조회를 수행 할 수 있습니다 : 그리고 당신은이처럼 사용할 수있는 TKEY 매개 변수에 대해 자신의 클래스를 사용하는 경우

int result1 = myDict["a"]; //throws exception when the value is not present 

은주의해야합니다. 그렇게하면 .Equals 및 .GetHashCode 메서드를 재정의해야합니다.

+0

조심스럽게 문자열을 변경할 수 없습니다. "1"<> "1"참조. 그 사실을 분명히해야합니다. 긴 문자열의 경우 문제가 될 수 있습니다. –

+0

또한 중복 키를 입력하면'Dictionary'가 예외를 throw합니다. 언급 할만한 가치가 있습니다. –

+0

@FirstStep - 속행 키를 입력하지 마십시오. 그냥 첫 번째 덧글을 고려하면 값이 중복됩니다. –

관련 문제