我有很多字符串。我将更频繁地找出以给定角色开头的所有字符串。什么是最好的集合来做到这一点。我将按排序顺序初始化集合。
由于
答案 0 :(得分:1)
如果您想要一个从角色到以该角色开头的所有字符串的地图,您可能会发现ILookup<TKey, TElement>
合适。它与Dictionary<TKey, TValue>
非常相似,有两个主要区别:
它不是1:1映射,而是执行1:n映射(即每个键可以有多个值)。
您无法自己实例化(new
)或填充它(.Add(…)
);相反,你让.NET通过调用后者的.ToLookup(…)
从另一个集合派生一个完全填充的实例。
以下是如何构建这样的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不是很好,因为它限制了你设计数据结构的能力。