arrays - 在 Ruby 中创建空子数组的数组

标签 arrays ruby multidimensional-array

我想创建一个包含 n 个不同的空子数组的数组。

这是最好的方法吗?

Array.new(n){ [] }

原来是这样的,看了评论修改了:

Array.new(n){ |_| [] }

我试过:

Array.new(n, [])

但它创建了一个数组,其中所有子数组都是同一个对象,这是我不想要的。

最佳答案

所有建议的获取此数组的方法 [[], [], [],...] 工作正常:

Array.new(n, []) # the best, 20 times faster
Array.new(n){ [] }
n.times.map { [] }

第一个是最快的,所以是最好的,但工作起来很奇怪(见下一个)。

it created an array with all the sub arrays being the same object

如果我明白了,您的意思是所描述的方法会发生以下情况:

a = Array.new(5, [])
p a # => [[], [], [], [], [], [], [], [], [], []]
p a.map { |e| e.object_id} # => [70189488740180, 70189488740180, 70189488740180, 70189488740180, 70189488740180]]

对象是相同的,因此如果您尝试用值填充子数组,所有子数组都将采用相同的值(复制):

a[0][0] = 10
p a # => [[10], [10], [10], [10], [10]]

为避免这种情况,不要传递默认值,而是映射到空数组:

a = Array.new(5).map{ |e| [] }
p a # => [[], [], [], [], []]

或者通过方 block

a = Array.new(5){ [] }
a = 5.times.map { [] }

现在每个子数组都是一个独立的对象:

p a.map { |e| e.object_id} # => [70253023825640, 70253023825620, 70253023825600, 70253023825580, 70253023825560]

如果您插入一些值,则不会复制:

a[0][0] = 10
a[1][0] = 20
p a # => [[10], [20], [], [], []]

关于arrays - 在 Ruby 中创建空子数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51924291/

相关文章:

java - Java中的getView和Beacon(Estimote)问题

c - 请教关于数组中char的问题

C++:创建结构的二维数组

arrays - 在Flutter中解析复杂的json时遇到问题

使用 jQuery 的 Javascript 高效搜索数组值

c - 在 C 中打印整数的 Char 数组

Ruby 将 64 位 IEEE 754 十六进制转换为 double

ruby-on-rails - 在 Rails 显示 View 中映射和链接模型实例

ruby-on-rails - HAML 语法错误中的 Rails 表单

ios - Objective-C 中的多维 NSMutableArrays