【问题标题】:Create multiple arrays in one line在一行中创建多个数组
【发布时间】:2019-02-03 18:11:06
【问题描述】:

我做到了:

a, b = Array.new(2, [0, 0])
a[0] = 1

我有:

a # => [1, 0]

b有问题,和a一样:

b # => [1, 0]

问题是参考地址。

帮我在一行中初始化数组。

【问题讨论】:

  • 你想通过在一行中编写所有代码来实现什么?
  • a, b = Array.new(2) { [0, 0] }.
  • 附带说明,如果您在任何类型的大型循环中执行此操作,您应该自己手动创建两个数组。否则,当你只需要两个数组时,你最终会创建三个数组,而且在大循环中使用时,垃圾回收的代价是昂贵的。
  • 我会写两行:a = [0, 0]b = [0, 0] - 更容易阅读而且没有开销。
  • @Stefan 对于新开发人员来说,可读性比保存的几行代码更有价值(最?)。去过那里,做到了:)

标签: arrays ruby


【解决方案1】:

这是提到here

当发送第二个参数(到Array.new)时,相同的对象将被用作所有数组元素的值:

因此,正如@mudasobwa 在 cmets 中已经建议的那样,您需要使用块版本,该版本使用块的结果来处理每个元素:

a, b = Array.new(2) { [0, 0] }
 => [[0, 0], [0, 0]]

a[0] = 1

a
 => [1, 0]

b
 => [0, 0]

【讨论】:

  • 我没有投反对票,但通常认为回答重复问题并不高效,因为它分散了整个网站的知识。相反,只需投票关闭作为重复项,然后继续。这个完全相同的问题已经在Stack Overflow 上被问过并回答了几十次,它实际上不需要另一个答案,说出与其他一百个完全相同的事情。
  • @JagdeepSingh 感谢您的解释,我真的没有仔细阅读。我的错!
  • @JörgWMittag 我完全同意,为已经回答的重复问题提供答案是没有效率的。我自己尝试先找到一个副本。没有这样做,我把我的答案放在那里。同样的事情也发生在这里。无论如何,无论是否重复,如果答案正确解决了问题,它就不会被否决。对吗?
  • 如果您将鼠标悬停在投反对票的箭头上,工具提示会给出一个示例,说明您可能想要投反对票的原因:“这个答案没用”。不同的人对“有用”的理解不同。有人将其解释为“对提问者有用”,有人将其解释为“对自己有用”,有人将其解释为“让世界变得更美好”,有人将其解释为“让Stack Overflow变得更美好”。我可以理解为什么赞同后一种解释的人可能会发现回答重复的问题不会使Stack Overflow 成为一个更好的地方。但是如果你想要一个明确的答案,你必须询问反对者。
猜你喜欢
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多