【问题标题】:Setting entire bool[] to false [duplicate]将整个 bool[] 设置为 false [重复]
【发布时间】:2014-01-01 04:27:47
【问题描述】:

我已经知道下面的循环示例

bool[] switches = new bool[20];
for (int i = 0; i < switches.Length; i++) { switches[i] = false; }

但是有没有更有效的方法将整个数组设置为 false?

为了解释一下,我不会像上面的例子那样将新的 bool 数组设置为 false,因为无论如何它已经是 false。 在我的情况下,我正在读取大部分进程内存,它在搜索模式时最多可以触发大约 18724 次。当它确定当前字节不包含该模式时,它将整个 bool 数组设置为 false 以及其他一些内容,然后读取下一个内存块并重新启动循环。

虽然我问这个问题更多是出于好奇,因为整个过程仍然不到一秒钟。

那么,我的问题是,有没有更好的方法将整个 bool 数组设置为 false?

【问题讨论】:

  • 只需将其分配给一个新数组:switches = new bool[20],默认情况下所有项都为 false。虽然如果对数组的引用被分发到其他地方,这将不起作用,因为这只会影响您设置的引用。不知道它是否更快,并且确实会给 GC 带来压力。
  • 几乎肯定不是。无论如何,循环的过程都需要完成。

标签: c# arrays boolean set


【解决方案1】:

default(bool)false,只需创建数组,每个元素都是false

bool[] switches = new bool[20];

【讨论】:

  • 如果你创建一个 Bool[] 并将它们全部设为 True 会怎样。
【解决方案2】:

如果您可以重新初始化数组,那么 Fabian Bigler 的回答是正确的方法。

但是,如果您想将其重新初始化为 true,则使用 Enumerable.Repeat

switches = Enumerable.Repeat(true, 20).ToArray();

【讨论】:

  • 值得注意的是,Enumerable.Repeat 非常慢。
【解决方案3】:

您可以尝试Array.Clear 作为替代方案:

Array.Clear(switches, 0, switches.Length);

不确定相对表现会如何,但你绝对不应该期待奇迹。

【讨论】:

    【解决方案4】:

    我相信default value of a boolean is false。然而,作为一个健全性检查,迭代它是有意义的。 AFAIK,这是最快的方法

    见:How to populate/instantiate a C# array with a single value?

    【讨论】:

      【解决方案5】:

      有没有更好的方法将整个 bool 数组设置为 false?

      不,没有。

      如果分配新数组更快,您可以进行基准测试,但我对此表示怀疑。 当然,正如 Adam Houldsworth 所指出的那样。

      switches = new bool[20];
      

      【讨论】:

      • 如果没有更好的办法,Array.Clear() 呢?
      • 你认为 Array.Clear() 在后台会做什么? ;-)
      • @FabianBigler 要在已删除的答案中回答您的回复,这是一条诙谐的评论。你绝对不应该仅仅因为你可以大声笑而使用 linq
      • @AdamHouldsworth 啊,在书面语言中,有时很难理解其中的讽刺意味。 ;-)
      • @AdamHouldsworth 而且,无论如何,我并没有否决您的答案。 ;-)
      【解决方案6】:

      switches.Clear(); 将完成这项工作。 .NET 中的数组具有固定大小,这就是为什么Clear() 不会删除任何元素,而是将所有元素设置为默认值(对于bool,这是false

      【讨论】:

        猜你喜欢
        • 2021-05-02
        • 2017-02-03
        • 1970-01-01
        • 1970-01-01
        • 2017-08-09
        • 2014-07-05
        • 2018-12-13
        • 2018-12-24
        • 1970-01-01
        相关资源
        最近更新 更多