我有一个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
单行代码可以解决这个更优雅的问题?
答案 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);