是否可以在列表中拆分每个字符串(包含2个单词),然后比较两个单词是否相同并使用Linq计算出现次数?例如:
我们说我有一个包含
的列表list[0] = "bla bla";
list[1] = "bla heh";
list[2] = "heh heh";
在这种情况下,count的输出应为2。
到目前为止我的尝试:
var count = lst.Count(c => c.Split(.......)....
无法超越这个。
非常感谢任何帮助。
答案 0 :(得分:3)
list.Select(c => c.Split(' ')).Count(y => y.Length >= 2 && y[0] == y[1]);
答案 1 :(得分:2)
您可以使用Select
子句,然后使用Count
,如下所示:
int count = myList.Select(s => s.Split(' '))
.Count(a => a[0] == a[1]);
或者你可以像这样使用Count
:
int count = myList.Count(s => s.Substring(0, s.IndexOf(' ')) ==
s.Substring(s.IndexOf(' ') + 1));
答案 2 :(得分:2)
使用nuget package&#39; System.Memory&#39;中的新Span<T>
值类型(请参阅this article)你可以在没有任何不必要的分配的情况下做到这一点:
int count = input.Count(x =>
{
int index = x.IndexOf(' ');
if (index < 1 || index == x.Length - 1) return false;
var span = x.AsSpan();
return span.Slice(start:0, length:index) // no allocation
.SequenceEqual(
span.Slice(start: index + 1)); // no allocation
});
答案 3 :(得分:1)
与其他人一样,但是如果你有3个或更多单词,它会相互检查它们,并且只计算到处都有相同单词的数组。
var result = test.Select(x => x.Split(' ')).Count(x => x.All(y => x[0] == y));