c#中集合字符串的最佳数据结构

时间:2014-02-14 10:25:59

标签: c# windows-phone-8

我有很多字符串。我将更频繁地找出以给定角色开头的所有字符串。什么是最好的集合来做到这一点。我将按排序顺序初始化集合。

由于

3 个答案:

答案 0 :(得分:1)

如果您想要一个从角色到以该角色开头的所有字符串的地图,您可能会发现ILookup<TKey, TElement>合适。它与Dictionary<TKey, TValue>非常相似,有两个主要区别:

  1. 它不是1:1映射,而是执行1:n映射(即每个键可以有多个值)。

  2. 您无法自己实例化(new)或填充它(.Add(…));相反,你让.NET通过调用后者的.ToLookup(…)从另一个集合派生一个完全填充的实例。

  3. 以下是如何构建这样的1:n地图的示例:

    using System.Collections.Generic;  // for List<T>
    using System.Linq;                 // for ILookup<TKey, TValue> and .ToLookup(…)
    
    // This represents the source of your strings. It doesn't have to be sorted:
    var strings = new List<string>() { "Foo", "Bar", "Baz", "Quux", … };
    
    // This is how you would build a 1:n lookup table mapping from first characters
    // to all strings starting with that character. Empty strings are excluded:
    ILookup<char, string> stringsByFirstCharacter =
        strings.Where(str => !string.IsNullOrEmpty(str))  // exclude empty strings
               .ToLookup(str => str[0]);                  // key := first character
    
    // This is how you would look up all strings starting with B.
    // The output will be Bar and Baz:
    foreach (string str in stringsByFirstCharacter['B'])
    {
        Console.WriteLine(str);
    }
    
      

    P.S。: ILookup<…>的上述超链接(界面)引导您访问Lookup<…>(实施类)的帮助页面。这是有目的的,因为我发现该类的文档更容易阅读。不过,我建议您在代码中使用该接口。

答案 1 :(得分:0)

如果您需要定期搜索大量字符串,请使用哈希表。请记住均匀分配表格以加快查找操作。

答案 2 :(得分:0)

那么你需要在string中创建一个函数索引。

对于此Id建议使用

Dictionary<string,List<string>>数据结构。

ToLookup不是很好,因为它限制了你设计数据结构的能力。