首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何拆分BitArray

如何拆分BitArray
EN

Stack Overflow用户
提问于 2011-06-24 22:14:24
回答 1查看 1.3K关注 0票数 5

我需要将(来自std.bitmanip的) BitArray一分为二。到目前为止,我发现切片没有实现,在它上面迭代,并附加或赋值总是产生范围外的异常。我尝试将它转换成其他类型(它适合长整型/乌龙型),但这似乎太麻烦了,而且当我尝试初始化新的BitArrays时,它也给了我一个超出范围的异常,如下所示:

代码语言:javascript
复制
BitArray[] C, D;
long lg = toLong(bitArr);
C[0].init(cast(void[])((lg >> 28) & 0x0fff_ffff), 28);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-25 00:08:31

用天真的方式做有什么错呢?

代码语言:javascript
复制
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

代码语言:javascript
复制
C ~= BitArray();

或者,使用静态数组:

代码语言:javascript
复制
BitArray[1] C, D;

注意:如果您不需要保留原始数组,那么您可以使用以下命令将其一分为二:

代码语言:javascript
复制
A.length /= 2;

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6469045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档