使用数组作为键搜索字典?

时间:2012-10-12 14:52:20

标签: c# .net arrays search

我想知道是否有可能有一个字典,其中键是一个字符串数组,然后通过比较搜索词和数组来搜索字典?

EG:

我的数组中有7个单词

那个阵列是关键。我想在字典中搜索任何键/值,其中键可能包含单词' has'。这可能吗?

3 个答案:

答案 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);
}

你当然可以用更多的方法重写这个以使其更清晰,另一个选择是使用匿名类而不是我在这里使用的TupleItem1更明智的名称和Item2