C# 查找列表中首次出现的字符串的更快方法

C# 查找列表中首次出现的字符串的更快方法,c#,list,optimization,set,C#,List,Optimization,Set,我有一种方法,可以在单词列表中找到第一个出现的单词。 wordSet-我需要检查的一组单词 该列表是文本的表示形式,因此按顺序定位的单词,该文本具有。 因此,如果pWords有吸收元素{这个,是,好的,男孩,和,这个,女孩,是,坏的} 而wordSethas{this,is}方法应该只为前两个元素添加true。 我的问题是:有没有更快的方法? 因为如果pwords有超过一百万个元素,而wordSet有超过10000个元素,那么它的运行速度相当慢 public List<bool> g

我有一种方法,可以在单词列表中找到第一个出现的单词。
wordSet
-我需要检查的一组单词 该列表是文本的表示形式,因此按顺序定位的单词,该文本具有。 因此,如果
pWords
有吸收元素
{这个,是,好的,男孩,和,这个,女孩,是,坏的}
wordSet
has
{this,is}
方法应该只为前两个元素添加true。 我的问题是:有没有更快的方法? 因为如果
pwords
有超过一百万个元素,而
wordSet
有超过10000个元素,那么它的运行速度相当慢

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;
    }
public List getfirstoccurrences(列出单词)
{
var firstoccurrence=新列表();
var wordSet=新列表(WordsWithFDictionary.Keys);
foreach(变量pwords在pwords中)
{
if(wordSet.Contains(pwWord))
{
首次发生。添加(true);
删除(pwWord);
}
其他的
{
首次发生。添加(false);
}
}
返回第一发生;
}

另一种方法是对单词集使用
HashSet

public List<bool> getFirstOccurances(List<string> pwWords)
{
    var wordSet = new HashSet<string>(WordsWithFDictionary.Keys);
    return pwWords.Select(word => wordSet.Contains(word)).ToList();
}
然后使用它

var occurrences = new FirstOccurances(WordsWithFDictionary.Keys);

// Now you can effectively search for occurrences multiple times
var result = occurrences.GetFor(pwWords);
var anotherResult = occurrences.GetFor(anotherPwWords);
因为可以单独检查
pWords
项的出现情况,如果未导入项的顺序,则可以尝试使用并行LINQ

public List<bool> GetFor(List<string> words)
{
    return words.AsParallel().Select(word => _wordSet.Contains(word)).ToList();
}
public List GetFor(列出单词)
{
返回words.AsParallel().Select(word=>\u wordSet.Contains(word)).ToList();
}

如果多次执行搜索,则可以使用
哈希集
而不是
列表
——其中搜索速度将比从
列表
public List<bool> GetFor(List<string> words)
{
    return words.AsParallel().Select(word => _wordSet.Contains(word)).ToList();
}