Linq汇总了累积的bool值

时间:2016-07-26 13:47:02

标签: c# linq

我有一个包含字符串的列表:

List<string> strList = new List<string>();

strList.Add("first");
strList.Add("second");
strList.Add("third");
strList.Add("fourth");

我需要在每次迭代时向返回bool的某个方法发送两个字符串,最后告诉结果是什么。

例如:

  • 第一次迭代:&#34;第一次&#34;,&#34;第二次&#34; (返回true)
  • 第二次迭代:&#34;第二次&#34;,&#34;第三次&#34; (返回true)
  • 第三次迭代:&#34;第三次&#34;,&#34;第四次&#34; (返回false)

因此,所有来电的返回值为false(在这些返回值之间执行"&&")。

我必须使用LINQ,所以我尝试做类似的事情:

strList.Aggregate<bool>((prev, current) => Method(prev,current));

但不幸的是我做错了什么。

进一步说明:

我想为strList中的所有连续字符串对调用bool方法(字符串,字符串)并获取布尔值&amp;&amp;所有结果

2 个答案:

答案 0 :(得分:4)

一种方法可能是创建对,然后调用Enumerable.All以查看其中是否有任何错误:

// create tuples
var pairs = strList
    .Zip(strList.Skip(1), Tuple.Create);

// check if all are true
var result = pairs.All(p => Method(p.Item1, p.Item2));

然而,这是短暂的(在遇到第一个false后将停止评估),并且在编辑之后,似乎您想要评估整个列表。

在这种情况下,您可以在获得元组后使用Aggregate<Tuple<string>, bool>(即具有不同类型的累加器的重载)。从true开始,使用布尔值&

var finalResult = strList
    .Zip(strList.Skip(1), Tuple.Create)
    .Aggregate(true, (val, tuple) => Method(tuple.Item1, tuple.Item1) & val);

如果您的方法接受Tuple,则可能会稍微更具可读性。

答案 1 :(得分:0)

此方法使用Aggregate Zip()并避免使用Method,但假设您以这样的方式编写代码 var result = strList.Aggregate( Tuple.Create("", true), (val, current) => Tuple.Create(current, val.Item2 & Method(val.Item1, current)), val => val.Item2); 以处理初始空字符串作为分开的种子元组。

Title

您可以使用different overload查看此信息。它不处理列表中只有1个项目的情况,但是接受的答案也没有。我想我们可以假设某个地方会受到支票的保护。