我有一组 boolean 值:x1, y1, z1, x2, z2, x3, y3, z3
每个都是真或假。与其编写几十个 if 语句来检查正确的真/假组合,什么是发现真假正确组合的绝对最有效和最快的方法?:
if(x1 == true && y1 == true && z1 == true &&
x2 == true && z2 == true &&
x3 == true && y3 == true && z3 == true)
{
//do stuff if this is correct combination
}
else if(x1 == false && y1 == true && z1 == true &&
x2 == true && z2 == true &&
x3 == true && y3 == true && z3 == true)
{
//do stuff if this is correct combination
}
//do on and so forth for the next few dozen lines to check combo's
我也在考虑使用 for 循环进行循环,但这似乎也很慢。这将每秒运行数十次,因此我正在努力使其尽可能高效。
编辑澄清: y2 被故意删除。
我这样做的原因是因为我有一个网格如下:
x1, y1 ,z1
x2, y2 ,z2
x3, y3 ,z3
我试图找出 y2 周围的所有 boolean 值是否都设置为 true 或 false,因为应用于 y2 的纹理在每种情况下都会不同。例如,如果 x1、y1 和 z1 为假但其余为真,则 y2 纹理将设置为特定图像。如果 x3、z1 和 x2 为假,其余为真,则 y2 将再次设置为不同的图像。我试图找到 y2 周围的哪些项目是打开或关闭的,以便我可以为 y2 设置正确的纹理。
最佳答案
只需将其转换为数字
x1 = 2^0 = 1
x2 = 2^1 = 2
x3 = 2^2 = 4
x4 = 2^3 = 8
你可以这样做,例如:
int digit =
(x1 ? 1 << 0 : 0) | (y1 ? 1 << 1 : 0) | (z1 ? 1 << 2 : 0) |
(x2 ? 1 << 3 : 0) | (y2 ? 1 << 4 : 0) | (z2 ? 1 << 5 : 0) |
(x3 ? 1 << 6 : 0) | (y3 ? 1 << 7 : 0) | (z3 ? 1 << 8 : 0);
或使用
BitArray
:BitArray bits = new BitArray(new[] {x1, y1, z1, x2, y2, z2, x3, y3, z3});
int[] array = new int[1];
bits.CopyTo(array, 0);
int digit = array[0];
这样你的组合:假,真,真,真,真将是 01111,这是
15
十进制然后,您可以将正确的组合存储为另一个数字,只需检查它们是否相等
关于c# - 用一组 8 个 boolean 值找到正确组合的最快方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20490154/