0

I have a SortedDictionary:

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

where the keys represent strings something like that:

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

What I want is to find all the items in the sorted dictionary that have specific row and col. For example if I have the following keys:

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

I want to get only these keys that have row=2 and col=3:

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

1 に答える 1

3

残念ながら、この場合、コレクション全体を反復処理して、条件に一致する項目を選択する必要があります (辞書自体はあまり使用しません)。

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;

Coord はクラス/構造体 (および Equals、GetHashCode をオーバーライドします)

class Coord
{
    public int Row { get; set; }
    public int Column { get; set; }
}
于 2012-12-15T13:31:41.343 に答える