gpt4 book ai didi

d - 如何拆分 BitArray

转载 作者:行者123 更新时间:2023-12-04 03:16:37 28 4
gpt4 key购买 nike

我需要将一个 BitArray(来自 std.bitmanip)分成两半。直到现在我发现切片没有实现,迭代它并附加或分配总是会产生超出范围的异常。我试图将它转换为其他类型(它适合 long/ulong),但这似乎太麻烦了,而且当我尝试初始化新的 BitArrays 时,它也会给我一个超出范围的异常,如下所示:

BitArray[] C, D;
long lg = toLong(bitArr);
C[0].init(cast(void[])((lg >> 28) & 0x0fff_ffff), 28);

我的问题有更简单的解决方案吗?如果没有,我做错了什么?

最佳答案

以天真的方式这样做有什么问题?

BitArray A, B, C;
A = /* ... */

// Split A into B & C
auto n = A.length;
B.length = n/2;
foreach (i; 0..n/2)
B[i] = A[i];

C.length = n - n/2;
foreach (i; n/2..n)
C[i-n/2] = A[i];

我在一个小测试用例上尝试了这个,对我来说效果很好。

您的代码不起作用的原因是数组的长度 C为零,因此访问 C[0]是非法的。您需要添加一个空的 BitArray第一的。
C ~= BitArray();

或者,或者,使用静态数组:
BitArray[1] C, D;

注意:如果不需要保留原始数组,那么只需使用以下命令即可将其切成两半:
A.length /= 2;

当然,您需要先复制后半部分。

关于d - 如何拆分 BitArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6469045/

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