【问题标题】:Searching a dictionairy with an array as key?以数组为键搜索字典?
【发布时间】:2012-10-12 14:52:19
【问题描述】:

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

EG:

我的数组中有 7 个单词

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

【问题讨论】:

  • 你试过什么?

标签: c# .net arrays search


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我会使用 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);
      }
      

      您当然可以用更多方法重写它以使其更清晰,另一种选择是使用匿名类而不是 Tuples 我在这里使用的名称比 Item1Item2 更合理.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 2011-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多