有没有办法按字符串数组匹配的字数对字符串列表进行排序?
var targets = new string[] { "one", "two", "three" };
var list = new List<string>();
list.Add("one little pony");
list.Add("one two little pony");
list.Add("one two three little pony");
list.Add("little pony");
x = x.OrderByDescending(u => targets.Any(u.Contains)).ToList();
foreach(var item in list)
{
Debug.Writeline(item);
}
有没有办法生成输出而不使用其他list
或for
循环来排序
one two three little pony
one two little pony
one little pony
little pony
答案 0 :(得分:7)
使用Count
代替Any
:
x = x.OrderByDescending(u => targets.Count(u.Contains)).ToList();
答案 1 :(得分:3)
使用List.Sort
对原始列表进行排序而不是创建新列表的另一种方法:
var targets = new HashSet<string> { "one", "two", "three" };
list.Sort((s1, s2) => -1 * (s1.Split().Count(targets.Contains)
.CompareTo(s2.Split().Count(targets.Contains))));
-1 *
用于对降序进行排序,因此最多出现在顶部。由于您已经提到要计算单词,因此也会通过搜索子字符串的空白区域进行拆分。
我使用了HashSet<string>
,因为它对查找更有效,并且重复项不应该被计算多次。
答案 2 :(得分:1)
var query = list.OrderByDescending(phrase =>
phrase.Split().Intersect(targets).Count());
你在这里概念性地做的是查看两组单词的交集计数。交集是两个其他集合中存在的项集。