如何从值列表中检查布尔值是否为真

时间:2016-10-20 07:14:30

标签: java c# c#-3.0

我有一个布尔值列表,检查其中一个布尔值是否为真且其他布尔值都为假的最有效方法是什么?

例如,我有一个包含100个布尔值的数组,如何检查1布尔值是否为真,所有其他布尔值是否为假。

9 个答案:

答案 0 :(得分:2)

作者想知道是否只有1个值是布尔值

  

如何检查1布尔值是否为真且所有其他布尔值均为假。

在C#中我会做类似

的事情

假设

List<bool> booleanList;

然后

int trueCount = booleanList.Count(b => b);
int falseCount = booleanList.Count(b => !b);

答案 1 :(得分:1)

遍历列表并检查每个值。如果找到第二个真值,请停止:

boolean found = false;
for (boolean b : list) {
  if (b) {
    if (found) return false;
    found = true;
  }
}
return found;

或者,您可以使用List.indexOfList.lastIndexOf

int indexOfFirstTrue = list.indexOf(true);
return indexOfFirstTrue != -1 && list.lastIndexOf(true) != indexOfFirstTrue;

答案 2 :(得分:1)

最高效的方法是使用BitSet而不是数组:

BitSet set = new BitSet(100); // ~ boolean[] array = new boolean[100];
set.set(42); // ~ array[42] = true;
[...]
int countTrueBits = set.cardinality();

BitSet使用移位操作,因此非常快。

了解详情:boolean[] vs. BitSet: Which is more efficient?

答案 3 :(得分:0)

 int countTrue=0;
for(boolean value: [Your List]){
     if(value)
       countTrue++;      

     if(countTrue>1) 
     break;  
 }

Check countTrue==1 OR not

答案 4 :(得分:0)

如果您使用的是Java 8,可以使用:

long size = booleanList.stream().filter(b -> Boolean.TRUE.equals(b)).count();
if(size == 1) {
    // do something
}

答案 5 :(得分:0)

使用Java 8流

List<Boolean> bools = list.stream().filter(val -> false)
            .collect(Collectors.asList());

if (bools.size()==99) { ...}

您筛选出所有真实的值。如果您的列表有100个值,您将收到一个包含99个错误值的新列表。

如果您知道列表中只有1个真值,则可以在找到它时停止。

list.stream().filter(val -> true)
            .findFirst()
            .get();

它会获得遇到的第一个true值并将其返回Optional

答案 6 :(得分:0)

int countTrue=0;
for(boolean value: [Your List]){
 if(value){
   countTrue++;  
   if(countTrue>1){
     // true is more than one time
     break;
   } 
  }

}

答案 7 :(得分:0)

在使用LinQ的C#中,您可以在单行代码中完成

var check = itemList.Any(x => x.isActive == true);

如果列表中有任何一个模型处于活动状态,它将返回true。

答案 8 :(得分:0)

我使用了来自System.Linq的IEnumerable.Count(Func),其中T为bool

bool[] values = {true, false, false, false};
int trueCount = values.Count(b=> b);

这将是列表中值的数量