【问题标题】:Array of fixed-length BitArrays固定长度的 BitArrays 数组
【发布时间】:2011-05-18 08:58:17
【问题描述】:

我遇到了BitArray 的麻烦。

目标是模拟 8 个 80 位 BitArrays 的堆栈,编号从 0 到 7。

我只需要能够通过索引访问它们,所以我认为一个简单的数组就足够了。

初始化BitArray 对象时,我需要指定它将包含的位数,这给了我

BitArray test = new BitArray(80);

知道我需要指定长度值,我该如何做一个数组?

我已经尝试了几件事,比如

BitArray[] stack = new BitArray(80)[];

但我在尝试给它长度时总是出错...

有什么想法吗?

提前致谢

【问题讨论】:

    标签: c# .net arrays initialization bitarray


    【解决方案1】:

    不幸的是,据我所知,该框架似乎没有“规范”的数组初始化模式。

    使用 LINQ 的一种方法是:

    var stack = Enumerable.Range(0, 8)
                          .Select(i => new BitArray(80))
                          .ToArray();
    

    或:

    var stack = Enumerable.Repeat<Func<BitArray>>( () => new BitArray(80), 8)
                          .Select(f => f())
                          .ToArray();
    

    或者,

    BitArray[] stack = new BitArray[8];
    
    for(int i = 0; i < stack.Length; i++)
       stack[i] = new BitArray(80);
    

    【讨论】:

      【解决方案2】:

      首先像这样创建您的 BitArray 数组 ([]):

      BitArray[] stack = new BitArray[8];
      

      然后在 for 循环中初始化所有单独的位数组(类似这样):

      foreach (BitArray arr in stack)
      {
          arr = new BitArray(80);
      }
      

      编辑:这样的东西或多或少是一个指针,没有经过实际测试;下面是:

      BitArray[] stack = new BitArray[8];
      for(int i=0;i<stack.Length;i++)
      {
          stack[i] = new BitArray(80);
      }
      stack[0][0] = true;
      

      【讨论】:

      • 这行不通。对于每个实例 arr,您都会得到 NullReferenceException。您需要使用 for 循环和 stack[n] = new BitArray(80); 之类的代码设置单个数组成员
      • 这里的数组foreach没有意义,很遗憾。
      • 我确实说过“类似这样的东西”.. 没有测试它;只是指出了一个解决方案。 Topicstarter 想要将两者结合起来 - 这不会起作用。
      • 嗯?我不希望这里出现异常,它只是不会任何事情。效果是,每次通过循环,'arr'都会引用数组元素之一,然后引用新的BitArray(不影响数组)。
      • 我认为它不会编译,因为 foreach 中的循环变量是只读的,不是吗?
      【解决方案3】:

      嗯……

      我终于做到了:

      List<BitArray> stack = new List<BitArray>(8);
      
      public FPU()
      {
          //initialise the stack
      
          for (int i = 0; i < stack.Capacity; i++)
          {
              stack[i] = new BitArray(80);
          }
      }
      

      感谢您的回答,这使我找到了这个解决方案,这似乎对我有用。

      祝你有美好的一天,再次感谢!

      【讨论】:

      • 更好地使用计数而不是容量。
      • 是的,在测试时注意到了这一点。为了灵活性,我已将堆栈计数替换为常量。
      猜你喜欢
      • 2011-05-30
      • 1970-01-01
      • 2019-02-28
      • 2020-08-31
      • 2014-03-31
      • 2011-02-16
      • 2020-03-11
      相关资源
      最近更新 更多