【问题标题】:How check bitArray contains any true or any false value?如何检查 bitArray 包含任何真值或假值?
【发布时间】:2009-06-09 11:14:35
【问题描述】:

在 C# 和 Vb.net 中,是否有任何方法不通过循环迭代位数组来检查是否有任何真假值(Dotnet 2.0)?

【问题讨论】:

    标签: c# vb.net


    【解决方案1】:

    我怀疑是否有任何方法可以在没有底层循环的情况下做到这一点(因为 BitArray 可以任意长,与 BitVector32 不同),但如果你不想自己写:

    var hasAnyTrue = input.Cast<bool>().Contains(true);
    var hasAnyFalse = input.Cast<bool>().Contains(false);
    

    【讨论】:

      【解决方案2】:

      如果您使用 System.Collections 中的 BitArray 类,您可以使用以下代码来确定是否为真。

      C#版本

      var anyTrue = myArray.Cast<bool>().Any(x => x);
      

      VB.Net版

      Dim anyTrue = myArray.Cast(Of Boolean)().Any(Function(x) x)
      

      【讨论】:

      • 不使用更简单的.Contains(true) 而不是Any 有什么好处?实际上,这就是我最初这样做的方式,但是我想到了Contains,我改变了它,因为我找不到任何具体的原因。想法?
      【解决方案3】:

      索引BitArray 并检查各个boolean 值是一个明显的解决方案。如果您关心性能,您应该首先考虑创建自己的抽象,但如果您更喜欢在大多数操作中使用BitArray,那么您可以使用CopyTo 对右侧的int[] 进行检查大小 (Count &gt;&gt; 5),然后根据需要对这些整数执行零或非零检查。

      【讨论】:

        【解决方案4】:

        我不知道你是否可以使用 BitArray,但是如果你使用 int、long 等,然后检查它是否大于 0(为真)或小于可以做到这一点的数据类型(为 false)。

        所以是这样的:

        bool IsTrue (int bitArray)
        {
          return bitArray != 0;
        }
        
        
        bool isFalse (int bitArray)
        {
           return bitArray != int.MinValue;
        }
        

        【讨论】:

        • 确实,这也是我的建议,前提是它可以投射。
        • BitArray 是一种类型。这不是int。
        • 是的,但就像你说的那样,真的没有办法在不循环的情况下检查值。我只是提供了一种检查位数组的方法,不一定使用 BitArray 类型。
        • 即使这样,也不对。 int 是有符号类型。 hasFalse 应该检查 != int.MinValue 而 hasTrue 应该检查 `!= 0`。
        • 好点,我没有想到这一点。感谢收看。
        猜你喜欢
        • 1970-01-01
        • 2018-06-22
        • 2020-12-31
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-06
        相关资源
        最近更新 更多