0

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

例如:

我的数组中有 7 个单词

该数组是关键。我想在字典中搜索键可能包含单词“has”的任何键/值。这可能吗?

4

3 回答 3

2

不,这基本上是行不通的——即使使用自定义相等比较器也是如此。听起来您真正想要的是单个单词的字典,其中每个单独的条目都有多个值。ToLookup如果您已经将输入数据作为一个序列,您可以使用 非常轻松地创建它。

于 2012-10-12T14:54:15.197 回答
1

也许带有自定义比较器的字典可能是要走的路(http://msdn.microsoft.com/en-us/library/ms132072.aspx),但在您的示例中(数组包含一个单词),可能会有更多结果匹配一把钥匙。所以 Dictionary 可能不是最好的存储选择,因为它只会返回一个值

于 2012-10-12T14:57:34.010 回答
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我在这里使用的 s 来获得比Item1and更合理的名称Item2

于 2012-10-12T15:16:04.630 回答