14

我有一个未排序的字符串列表。我可以将这些项目放在一个数组、List、SortedList 等中。

我需要找到在此列表中查找字符串的最快方法。我最好将列表转储到数组中,对其进行排序,然后实现二进制搜索?或者框架是否提供了一种方法来做到这一点?

谢谢

PS 对 .NET 2.0 使用 VS2008

4

3 回答 3

23

如果您的目标只是快速找到集合中的字符串,请将它们放入HashSet中。

HashSet.Contains是一个 O(1) 方法,而字符串默认具有良好的哈希算法,因此很难做出比这更快的例程。


编辑:

由于您使用的是 .NET 2,因此我将Dictionary<string,string>使用相同的字符串作为键和值。 Dictinoary<TKey,TValue>.Contains也是 O(1),并且比您尝试的任何基于列表的搜索要快得多。

于 2010-01-16T00:27:18.447 回答
2

如果你只需要找到一个对象,一次,只需从头开始,查看每个对象,直到找到它。如果您必须对同一个列表多次重复此 Find 操作,以查找不同的项目,然后对其进行排序,保留已排序的列表并进行二进制搜索...

于 2010-01-16T00:28:46.257 回答
-2

我不确定这对您是否有用,但这将是一种相当简单的方法,但不确定它的确切“速度”。

List<string> collection = new List<string>();

collection.Sort();

foreach(string value in collection)
{
   if(value == "stringToLookFor")
   {
       return value;
   }
{
于 2010-01-16T00:41:53.253 回答