按位操作到List <bool>

时间:2016-06-23 08:57:39

标签: c# linq list

我有一个List<bool>并希望对列表进行按位异或(以创建校验位)

这是我目前的

List<bool> bList = new List<bool>(){true,false,true,true,true,false,false};
bool bResult = bList[0];

for( int i = 1;i< bList.Count;i++)
{
    bResult ^= bList[i];
}

问:是否有一个Linq单行代码可以解决这个更优雅的问题?

4 个答案:

答案 0 :(得分:11)

bool bResult = bList.Aggregate((a, b) => a ^ b);

答案 1 :(得分:7)

另一个单行解决方案(除了 Buh Buh 的一个):

bool bResult = bList.Count(a => a) % 2 == 1;

当您 xor bool的序列时,如果奇数true,您实际上想要返回true顺序

答案 2 :(得分:2)

您可以使用Aggregate

bool result = bList.Aggregate((res, b) => res ^ b);

这会为除第一个元素之外的每个元素调用lambda。 res是累计值(或第一次调用的第一个元素),b是列表中的当前值。

答案 3 :(得分:0)

         List<bool> bList = new List<bool>() { true, false, true, true, true, false, false };
        bool bResult = bList[0];

        //for (int i = 1; i < bList.Count; i++)
        //{
        //    bResult ^= bList[i];
        //}
        bList.ForEach(t=>bResult ^= t);