我想知道是否有可能有一个字典,其中键是一个字符串数组,然后通过比较搜索词和数组来搜索字典?
EG:
我的数组中有7个单词
那个阵列是关键。我想在字典中搜索任何键/值,其中键可能包含单词' has'。这可能吗?
答案 0 :(得分:2)
不,这基本上不起作用 - 即使使用自定义相等比较器。这听起来像你真正想要的是一个单词的词典,其中每个单独的条目都有多个值。如果您已将输入数据作为序列输入,则可以使用ToLookup
轻松创建。
答案 1 :(得分:1)
使用自定义比较器的Dictionary可能是最佳选择(http://msdn.microsoft.com/en-us/library/ms132072.aspx),但在您的示例中(数组包含一个单词),可能会有更多匹配一个键的结果。所以字典可能不是最好的存储选择,因为它只返回一个值
答案 2 :(得分:0)
我会使用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
比Item1
更明智的名称和Item2
。