gpt4 book ai didi

c# - 检查 C# BitArray 非零值的最快方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:04 24 4
gpt4 key购买 nike

我试图在 C# 中快速检测 BitArray 之间的冲突(使用 AND bool 运算),这导致单个 BitArray 表示重叠区域。

显然,如果生成的数组仅由零组成,则不会发生冲突。检查这个的最快方法是什么?简单的迭代太慢了。我不关心碰撞在哪里,或者有多少——只关心数组中某处有一个非零值。

似乎应该有某种类似“将整个位数组转换为一个 int 值”的快速案例(这特别行不通,因为 BitArray 的大小是可变的),但我想不出一个出。

最佳答案

您需要 And() 方法生成的 BitArray 吗?如果没有,您可以循环遍历输入数组并在第一次碰撞时返回 true。

bool collision(BitArray a1, BitArray a2) {
if (a1 == null || a2 == null) throw new ArgumentException("arguments cannot be null");
if (a1.Count != a2.Count) throw new ArgumentException("arrays don't have same length");
for (int i = 0; i < a1.Count; i++)
if (a1[i] && a2[i]) return true;

return false;
}

这样你就可以防止数组循环两次——即。一次用于 And() 一次用于检查。平均而言,您只会遍历数组的一半,因此速度最高可达 4 倍。

另一种方式是。像 @itsme86 建议使用 int 而不是 BitArrays

int a1, a2;
bool collision = (a1 & a2) > 0;

关于c# - 检查 C# BitArray 非零值的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com