我想知道是否有可能有一个字典,其中键是一个字符串数组,然后通过将搜索词与数组进行比较来搜索字典?
例如:
我的数组中有 7 个单词
该数组是关键。我想在字典中搜索键可能包含单词“has”的任何键/值。这可能吗?
不,这基本上是行不通的——即使使用自定义相等比较器也是如此。听起来您真正想要的是单个单词的字典,其中每个单独的条目都有多个值。ToLookup
如果您已经将输入数据作为一个序列,您可以使用 非常轻松地创建它。
也许带有自定义比较器的字典可能是要走的路(http://msdn.microsoft.com/en-us/library/ms132072.aspx),但在您的示例中(数组包含一个单词),可能会有更多结果匹配一把钥匙。所以 Dictionary 可能不是最好的存储选择,因为它只会返回一个值
我会使用 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);
}
您当然可以用更多方法重写它以使其更清晰,另一种选择是使用匿名类而不是Tuple
我在这里使用的 s 来获得比Item1
and更合理的名称Item2
。