2014-11-01 70 views
-1

我对这个有点腌制。查找关键字最高的列表中的字符串

所以我有什么是关键字列表,例如:

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(); 
+0

嗨,堆栈溢出是有点不同于互联网论坛网站。在这里,我们喜欢每个问题坚持一个主题。如果你的问题得到了一个有用的答案(它的确如此),那么很好,将答案标记为已接受,也许可以赞成。如果在应用解决方案后出现任何*新问题,请发起一个新问题。 – 2014-11-01 22:34:32

回答

3

这将是使用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如果你想不区分大小写。

+0

linq中不支持maxby(错误'System.Collections.Generic.List '不包含'MaxBy'的定义,也没有接受'System'的第一个参数的扩展方法'MaxBy' .Collections.Generic。列表'可能被发现(你是否缺少使用指令或程序集引用?)) 我正在使用c#btw。 – 2014-11-01 08:51:06

+0

它来自morelinq库https://code.google.com/p/morelinq/ – 2014-11-01 08:52:05

+0

哦,我不想让它变得复杂,但是字符串列表基本上是包含字符串的对象列表,例如object.Title =“这句话包含关键字苹果和另一个关键词汽车”; – 2014-11-01 08:53:50

-2

是的,我想我回答我自己的问题:

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

return results.First(); 

我要感谢大家的意见!

相关问题