在列表中查找关键字计数最高的字符串

本文关键字:字符串 字计数 列表 查找 | 更新日期: 2023-09-27 18:28:46

我对此有点为难。

所以我有一个关键字列表,例如:

this,
keyword,
apple,
car,
banana

我有一个字符串列表,我想找到的是那些关键字计数最高的字符串,我从.Any()开始,但这会返回第一个匹配关键字的字符串。

我的字符串列表:

This is a car. (2 keywords)
This is a sentence with the keyword apple, (3 keywords)
This sentence contains the keyword apple and another keyword car, (5 keywords)
The next sentence contains only car (1 keyword)

现在我想找到的是第三句话(最多有5个关键字)。

这是一个有点超出我想象的算法,我也在linq中思考,也许我应该用另一种方法来处理它

有人能帮我做这个吗?

感谢

编辑:

好的,我用MaxBy()方法处理了它。

现在我偶然发现了另一个问题,让我解释一下我在项目中做了什么:

基本上我有一个种子列表

Torrent.Title
Torrent.Seeds

现在我在激流上用MaxBy得到了结果。标题,但这没有考虑到种子。我建议这样做:对最大关键字进行某种排序,然后对种子进行排序。有人认为这是可能的吗?

这行得通吗?

var results = torrents.OrderByDescending(torrent => torrent.Title.Replace(".", " ").Replace("-", " ").Split().Count(Settings.FilterKeywords.Split(',').Contains)).ThenByDescending(torrent => torrent.Seeds);
return results.First();

在列表中查找关键字计数最高的字符串

使用MaxBy方法会更容易:

var keywords = new HashSet<string> { "this", "apple", "car", "keyword" };
var sentence = sentences.MaxBy(x => x.Split().Count(keywords.Contains));

不使用第三方库:

sentences
.Select(s => new { Sentence = s, Count = s.Split().Count(keywords.Contains) })
.OrderByDescending(x => x.Count).First().Sentence;

如果要进行不区分大小写的搜索,可以在Split之前使用ToLower