Я использую hashet
, linq Intersect()
и Count()
, чтобы найти пересечение двух списков строк.
Используемый код
private HashSet<string> Words { get; }
public Sentence(IEnumerable<string> words)
{
Words = words.ToHashSet();
}
public int GetSameWordCount(Sentence sentence)
{
return Words.Intersect(sentence.Words).Count();
}
Метод GetSameWordCount
принимает> 90% времени выполнения программы, поскольку существуют миллионы предложений для сравнения друг с другом.
Есть ли более быстрый способ сделать это?
Я использую . net core 3.1.1 / C# 8 , поэтому можно использовать любые последние функции.
Дополнительная информация:
Входные данные из текстового файла (например, отрывок из книги, статьи из Интернета). Предложения затем без акцента, в нижнем регистре и разделены на слова с помощью пробела> регулярное выражение. Короткие слова (длина <3) игнорируются. <br>Я создаю группы предложений, которые имеют N общих слов, и упорядочиваю> эти группы по количеству общих слов.