在 C# 中,如果我有一个 bool 类型的列表。确定列表是否包含真值的最快方法是什么?我不需要知道真正的价值是多少或在哪里。我只需要知道是否存在。我将搜索许多非常大的列表。
8 回答
只需使用bool trueInList = list.Contains(true);
. 这会循环列表,直到有一个true
.
为什么你需要这样一个简单的用例更快的东西?
使用 list.Contains(true) 或 list.Any(true)。对于普通列表,两者的复杂度都为 O(n)。由于 Any() 是一个扩展方法,它需要调用委托,因此 Contains() 可能仍然快一点。但可以肯定的是,我会简单地用一个大集合来测试两者。
你可以使用任何()。
list.Any(b => b);
试试这个:
var result = myBoolList.Any(i => i==true);
您使用Any(...)
list.Any(c => c == true);
要不就
list.Any(c => c);
您可以使用列表的 BinarySearch 方法。
if(list.BinarySearch(true) > 0){...}
This answer provides a different angle on this: Why store the bools in a list? Store them as two ints: int falseCount; int trueCount;
.
Contains-testing is as simple as: trueCount > 0
Assuming that you need the list, use List.Contains
as it directly searches the underlying array.
It would be even faster to extract the underlying array using reflection and search it in a hard-coded comparison loop. You can use the literal true
there to compare each element. You can even unroll the loop or do unsafe code tricks.
bool val = false;
Foreach(bool val in listofvalue)
{
val |= val;
}
if(val)
print "List contain true value"
else
print "List contain false value"