【发布时间】:2011-01-05 17:55:16
【问题描述】:
我有一个未排序的字符串列表。我可以将这些项目放在一个数组中,List、SortedList 等等。
我需要找到在此列表中查找字符串的最快方法。我最好将列表转储到数组中,对其进行排序,然后实现二进制搜索?或者框架是否提供了一种方法来做到这一点?
谢谢
附:针对 .NET 2.0 使用 VS2008
【问题讨论】:
标签: c# visual-studio-2008 search .net-2.0 lookup
我有一个未排序的字符串列表。我可以将这些项目放在一个数组中,List、SortedList 等等。
我需要找到在此列表中查找字符串的最快方法。我最好将列表转储到数组中,对其进行排序,然后实现二进制搜索?或者框架是否提供了一种方法来做到这一点?
谢谢
附:针对 .NET 2.0 使用 VS2008
【问题讨论】:
标签: c# visual-studio-2008 search .net-2.0 lookup
如果您的目标只是快速找到集合中的字符串,请将它们放入HashSet。
HashSet.Contains 是一个 O(1) 的方法,并且字符串默认具有良好的哈希算法,因此很难做出比这更快的例程。
编辑:
由于您使用的是 .NET 2,所以我只需执行 Dictionary<string,string> 并使用相同的字符串作为键和值。 Dictinoary<TKey,TValue>.Contains 也是 O(1),并且比您尝试的任何基于列表的搜索要快得多。
【讨论】:
如果您一次只需要找到一个对象,请从头开始,逐个查看,直到找到为止。如果您必须对同一个列表多次重复此 Find 操作,以找到不同的项目,然后对其进行排序,保留排序后的列表并进行二分搜索...
【讨论】:
我不确定这是否对您有用,但这将是一种相当简单的方法,但不确定它的确切“速度”。
List<string> collection = new List<string>();
collection.Sort();
foreach(string value in collection)
{
if(value == "stringToLookFor")
{
return value;
}
{
【讨论】: