我有一个未排序的字符串列表。我可以将这些项目放在一个数组、List、SortedList 等中。
我需要找到在此列表中查找字符串的最快方法。我最好将列表转储到数组中,对其进行排序,然后实现二进制搜索?或者框架是否提供了一种方法来做到这一点?
谢谢
PS 对 .NET 2.0 使用 VS2008
我有一个未排序的字符串列表。我可以将这些项目放在一个数组、List、SortedList 等中。
我需要找到在此列表中查找字符串的最快方法。我最好将列表转储到数组中,对其进行排序,然后实现二进制搜索?或者框架是否提供了一种方法来做到这一点?
谢谢
PS 对 .NET 2.0 使用 VS2008
如果您的目标只是快速找到集合中的字符串,请将它们放入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;
}
{