拆分列表中的每个双字符串字符串,比较相同并使用Linq

时间:2018-04-15 17:42:19

标签: c# linq

是否可以在列表中拆分每个字符串(包含2个单词),然后比较两个单词是否相同并使用Linq计算出现次数?例如:

我们说我有一个包含

的列表
list[0] = "bla bla";
list[1] = "bla heh";
list[2] = "heh heh";

在这种情况下,count的输出应为2。

到目前为止我的尝试:

var count = lst.Count(c => c.Split(.......)....

无法超越这个。

非常感谢任何帮助。

4 个答案:

答案 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));