8

単一の値で複数のキーを取得する方法を探しています。はい、私はすでに検索機能を使用しましたが、ほとんどの回答は反対方向 (キーごとに複数の) ですが、反対が必要です。

この背後にある理由は、「メイン」ID ごとに複数のアイテム ID (ボット用) を保持する必要があり、それらの複数の ID を 1 つの値にスローすると、変更するには遅すぎる (1 つの値を探す => ループする) ことです。すべてのメイン ID & 各値を取得し、その ID が存在するかどうかを確認します)。

Key 1 => Value
Key 2 => Value
Key 3 => Value
Key 4 => Value
Key 5 => Value 2

値を探すと、5 ではなくキー 1 ~ 4 が返されます。

だから私はそれをもっと簡単にする方法を探しています - 上で言ったように。

それが可能かどうか、またその方法を知っている人はいますか?前もって感謝します。

4

5 に答える 5

7

編集:編集 を見ると、これを逆に設計したように見えますDictionary...キーは、キーを一致させるための値ではなく、値を一致させるためのものでなければなりません。

外部キーを内部キーにマップする辞書を作成し、内部キーを使用して 2 番目の辞書のインデックスを作成するようなことができます。

例:

var outer = new Dictionary<int, Guid> {
  { 1, GuidA },
  { 2, GuidA },
  { 3, GuidA },
  { 4, GuidA },
  { 5, GuidB }
};
var inner = new Dictionary<Guid, Value> {
  { GuidA, Value1 },
  { GuidB, Value2 }
};

次のようにアクセスしますvalue = outer[inner[key]]

于 2013-09-30T20:17:27.640 に答える
4

問題を考えすぎている可能性があります。ルックアップ操作に役立つようにするには、キーが一意である必要があります。値は一意である必要はありません。問題を引き起こすことなく、複数のキーが同じ値を指すことができます。

于 2013-09-30T20:52:03.777 に答える
3

辞書を逆にして、値を項目のリストにします。

たとえばValueが文字列でKey 1-4int の場合、辞書は次のようになります。

var theDictionary = new Dictionary<string, List<int>>();

Valueby で取得するtheDictionary["Value"]と、1、2、3、および 4 を含む int のリストが返されます。

編集 - 例を追加:

var theDictionary = new Dictionary<string, List<string>>
    {
        {"Value", new List<string> {"Key 1", "Key 2", "Key 3", "Key 4", "Key 5",}},
        {"Value2", new List<string> {"Key 5", "Key 2"}}
    };

var oneToFour = theDictionary["Value"];
于 2013-09-30T20:29:01.663 に答える