【发布时间】:2017-04-08 08:58:36
【问题描述】:
我有一个方法,可以在单词列表中找到第一个出现的位置。
wordSet - 一组单词,我需要检查
该列表是文本的表示,因此按顺序排列的单词,该文本具有。
所以如果pwWords 有吸元素{This,is,good,boy,and,this,girl,is,bad}
并且wordSet 具有{this,is} 方法应该只为前两个元素添加true。
我的问题是:有没有更快的方法来做到这一点?
因为如果pwWords 拥有超过百万个元素,而wordSet 超过 10 000 个元素,它的运行速度就会很慢。
public List<bool> getFirstOccurances(List<string> pwWords)
{
var firstOccurance = new List<bool>();
var wordSet = new List<String>(WordsWithFDictionary.Keys);
foreach (var pwWord in pwWords)
{
if (wordSet.Contains(pwWord))
{
firstOccurance.Add(true);
wordSet.Remove(pwWord);
}
else
{
firstOccurance.Add(false);
}
}
return firstOccurance;
}
【问题讨论】:
-
如果搜索不止一次,那么您可以使用
HashSet<string>而不是List- 搜索会比List更快
标签: c# list optimization set