将整个 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'解析为字符串[重复]
在反应状态下将 false 设置为 bool 属性没有任何作用