0

我正在使用 Lucene/.NET 来实现一个数字搜索引擎。

我想从一个大范围内过滤数字,这取决于字符串数组中存在的数字。

我使用了以下代码:

int startValue = 1; 
endValue = 100000;

//Assume that the following string array contains 12000 strings
String[] ArrayOfTerms = new String[] { "1", "10",................. , "99995"};

public String[] GetFilteredStrings(String[] ArrayOfTerms)
{
  List<String> filteredStrings = new List<String>();

  for (int i = startValue; i <= endValue; i++)
  {                       
     int index = Array.IndexOf(ArrayOfTerms,i.ToString());

     if( index != -1)
     {
        filteredStrings.Add((String)ArrayOfTerms.GetValue(index));
     }      
  }

return filteredStrings.ToArray();

}

现在,我的问题是它搜索从 1 到 100000 的每个值并且花费了太多时间。有时我的应用程序挂起。

你们中的任何人都可以帮助我如何改善这个性能问题吗?我不知道缓存的概念,但我知道 Lucene 支持缓存过滤器。我应该使用缓存过滤器吗?提前致谢。

4

2 回答 2

0

实际上,您正在尝试确定 Array 是否包含该项目。我认为您应该使用 HashSet 或 Dictionary 之类的东西来确定 O(1) 时间而不是 O(n) 时间的值的存在。

于 2012-07-20T10:14:54.073 回答
0

这段代码的运行速度要快得多。

var results = ArrayOfTerms.Where(s => int.Parse(s) <= endValue);

如果我得到你想做的事

于 2012-07-20T10:22:30.740 回答