キーが文字列の配列である辞書を作成し、検索語を配列と比較して辞書を検索することは可能かどうか疑問に思いました。
例えば:
私の配列には7つの単語が含まれています
その配列が鍵です。キーに「has」という単語が含まれている可能性のあるキー/値を辞書で検索したいと思います。これは可能ですか?
いいえ、それは基本的には機能しません-カスタムの等式比較器を使用しても。本当に必要なのは、個々の単語の辞書であり、個々のエントリには複数の値があるようです。ToLookup
入力データをシーケンスとして既に取得している場合は、を使用して非常に簡単に作成できます。
たぶん、カスタム比較機能を備えた辞書が行く方法かもしれませんが(http://msdn.microsoft.com/en-us/library/ms132072.aspx)、サンプル(配列には単語が含まれています)では、より多くの結果が一致する可能性があります1キー。したがって、辞書は1つの値しか返さないため、おそらく選択するのに最適なストレージではありません。
linqを使用して、値を持つ単語のコレクション(キー)を、キーとして単語を持ち、値としてその単語を含むキーを持つすべての値の配列を持つ辞書に変換します。
public class WordsWithValue
{
public string[] Words { get; set; }
public object Value { get; set; }
}
public IDictionary<string, object[]> GetValuesForWord(IEnumerable<WordsWithValue> wordsWithValues)
{
return wordsWithValues.SelectMany(wwv => wwv.Words.Select(word => Tuple.Create(word, wwv.Value)))
.GroupBy(tuple => tuple.Item1, tuple => tuple.Item2, (word, values) => Tuple.Create(word, values.ToArray()))
.ToDictionary(tuple => tuple.Item1, tuple => tuple.Item2);
}
もちろん、これをさらにいくつかのメソッドで書き直して、これをより明確にすることができます。別のオプションは、ここで使用したsの代わりに匿名クラスを使用して、およびTuple
よりもわかりやすい名前を付けることです。Item1
Item2