2012-12-15 2 views
0

은 내가 SortedDictionary 있습니다비슷한 키를 가진 SortedDictionary의 모든 항목을 찾는 방법?

string key = someNumber + " " + row + " " + col + " " + someString; 

내가 원하는 것은 특정 행 안부를 정렬 된 사전의 모든 항목을 찾을 수 있습니다 : 키가 캐릭터에게 그런 일을 나타냅니다

static SortedDictionary<string, int> myDictionary = new SortedDictionary<string, int>(); 

. 예를 들어 나는 다음 키가있는 경우 : 내가에만 이러한 키를 얻으려면

1 2 3 p 
3 2 3 p 
2 2 3 t 
5 1 6 p 
8 2 1 p 
7 2 3 t 

을 행 = 2, COL = 3 :

1 2 3 p 
3 2 3 p 
2 2 3 t 
7 2 3 t 

답변

2

불행하게도이 경우 당신은 반복 할 필요가 전체 수집 및 기준 (사전 자체가 너무별로 사용)과 일치하는 항목 선택 : 자주 행과 열을 기준으로 쿼리해야하는 경우

public IList<int> FindValues(int row, int col) 
{ 
    myDictionary 
     .Where(item => MatchKey(item.Key, row, col)) 
     .Select(item => item.Value) 
     .ToList(); 
} 

public bool MatchKey(string key, int row, int col) 
{ 
    var splitKey = key.Split(); 
    return splitKey[1] == row.ToString() && splitKey[2] == col.ToString(); 
    // or match the key according to your logic 
} 

비록, 그것은 다른 데이터들 구축하는 것이 좋습니다 먼저 구조. 어쩌면

Dictionary<Coord, IList<int>> myDict; 
좌표 운전 클래스/구조체이다

(및 재정의 같음, GetHashCode)

class Coord 
{ 
    public int Row { get; set; } 
    public int Column { get; set; } 
} 
+1

+1, 내가 행과 열을 기준으로 별도의 클래스/구조 "그룹"개체를 생성에 동의 . AlexD의 대답에 두 가지를 추가하면됩니다 : 1)'DIctionary >'대신'Look '을 사용하십시오. 그것은 사실 동일하지만, 작업하기가 훨씬 쉽습니다. 2)'Coords' 클래스에'Equals'와'GetHashCode' 메소드를 추가하는 것을 잊지 마십시오. 그렇지 않으면 Dictionary/Lookup은이 경우에 바람직하지 않은 참조만을 비교할 것입니다. –