C# 用LINQ匹配大多数匹配词
我想写一个LINQ查询,它将返回按匹配单词数排序的最匹配单词的记录。而且单词不必按顺序排列 输入:C# 用LINQ匹配大多数匹配词,c#,.net,linq,C#,.net,Linq,我想写一个LINQ查询,它将返回按匹配单词数排序的最匹配单词的记录。而且单词不必按顺序排列 输入: "word3 word2" 字符串数组: "word1 word2 word3 word4 word5" "word1 word2" "word4 word5" "word1 word4 word5" 输出将是 "word1 word2 word3 word4 word5" "word1 word2" 这对LINQ可行吗?我发现LINQ和Regex的组合起到了作用。获取输入,并将其转换为在W
"word3 word2"
字符串数组:
"word1 word2 word3 word4 word5"
"word1 word2"
"word4 word5"
"word1 word4 word5"
输出将是
"word1 word2 word3 word4 word5"
"word1 word2"
这对LINQ可行吗?我发现
LINQ
和Regex
的组合起到了作用。获取输入,并将其转换为在Where()
Linq
中使用的模式
在本例中,输入被转换为
"word3|word2"
我们使用它来查找数组中具有word3或(管道字符的意思是或在Regex
)word2的行
这可以用Linq来完成 例如:
var wantedWords = "word3 word2".Split();
var strings = new List<string>
{
"word1 word2 word3 word4 word5",
"word1 word2",
"word4 word5",
"word1 word4 word5"
};
var result = from s in strings
let words = s.Split()
select new
{
String = s,
MatchedCount = wantedWords.Count(ww => words.Contains(ww))
} into e
where e.MatchedCount > 0
orderby e.MatchedCount descending
select e.String;
var wantedWords=“word3 word2.Split();
var strings=新列表
{
“单词1单词2单词3单词4单词5”,
“word1 word2”,
“word4 word5”,
“word1 word4 word5”
};
var result=来自字符串中的s
让words=s.Split()
选择新的
{
字符串=s,
MatchedCount=wantedWords.Count(ww=>words.Contains(ww))
}进入e
其中e.MatchedCount>0
orderby e.MatchedCount递减
选择e.字符串;
您是否尝试过任何事情,或者只是想让我们做您的工作/家庭作业?我尝试过将输入放入字符串数组,然后在其中包含输入数组。但是坚持按单词数量排序的部分有没有写这篇文章的技巧?用你尝试过的内容编辑你的问题
word1 word2 word3 word4 word5
word1 word2
var wantedWords = "word3 word2".Split();
var strings = new List<string>
{
"word1 word2 word3 word4 word5",
"word1 word2",
"word4 word5",
"word1 word4 word5"
};
var result = from s in strings
let words = s.Split()
select new
{
String = s,
MatchedCount = wantedWords.Count(ww => words.Contains(ww))
} into e
where e.MatchedCount > 0
orderby e.MatchedCount descending
select e.String;