将整个 bool[] 设置为 false [重复]

Posted

技术标签:

【中文标题】将整个 bool[] 设置为 false [重复]【英文标题】:Setting entire bool[] to false [duplicate] 【发布时间】: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 带来压力。 几乎肯定不是。无论如何,循环的过程都需要完成。 @user2025312:有definite possibilities for optimization。 【参考方案1】:

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

bool[] switches = new bool[20];

【讨论】:

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

如果您可以重新初始化数组,那么 F*** 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() 在后台会做什么? ;-) @F***Bigler 要在已删除的答案中回答您的回复,这是一条诙谐的评论。你绝对不应该仅仅因为你可以大声笑而使用 linq @AdamHouldsworth 啊,在书面语言中,有时很难理解其中的讽刺意味。 ;-) @AdamHouldsworth 而且,无论如何,我并没有否决您的答案。 ;-)【参考方案6】:

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

【讨论】:

以上是关于将整个 bool[] 设置为 false [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将默认值设置为列代码优先方法[重复]

Python将'True'和'False'解析为字符串[重复]

出现错误:将空字符串返回到 bool [重复]

在反应状态下将 false 设置为 bool 属性没有任何作用

从 bool 为 true 的重复项中获取一个,如果没有则为后备

为啥 PDO 将我的 bool(false) 参数转换为 string('')?