在一行中创建许多数组

ssc*_*rus 10 ruby arrays

我需要做类似以下的事情

e = []
m = []
p = []
t = []
...and so on for about 10 different arrays
Run Code Online (Sandbox Code Playgroud)

有没有办法在一行上创建所有这些数组?

Dhr*_*gar 20

您可以使用以下方法执行此操作:

e,m,p,t... = Array.new(10) { [] }
Run Code Online (Sandbox Code Playgroud)

事实证明

[[]]*10
Run Code Online (Sandbox Code Playgroud)

不是正确的方法,[[]]*10是重复,只是重复相同的对象[]10次​​,所以所有的变量最终都会被分配到同一个对象.

  • 第一个解决方案很好(尽管你可以做`Array.new(10){[]}`).但是,你的第二个解决方案有一个问题.如果其中一个变量被修改(例如`e <<"foo"`),那么`m`,`p`,`t`等也会被修改. (2认同)

jar*_*lan 6

像一行中的多个变量声明一样 a1, a2, a3 = 3, 10, 4

e, m, p, t ... = [], [], [], [] ...
Run Code Online (Sandbox Code Playgroud)


Mar*_*une 5

我很好奇那 10 个不同的数组是什么,因为我怀疑它们不应该是 10 个不同的变量,而应该是一个。您没有提供任何上下文,所以我只能猜测,以下内容可能会更好:

whatever = Hash.new{|h, k| h[k] = []}
whatever[:e] # => []
whatever[:m] << 42
whatever[:m] # => [42]
# etc...
Run Code Online (Sandbox Code Playgroud)

否则,正如zomboid所写:

e, m, p, t ... = [], [], [], [] ...
Run Code Online (Sandbox Code Playgroud)


San*_*ing 5

一切都失败了

>  p, q, r = v = Array.new(3, [])
 => [[], [], []] 
>  v.map(&:object_id)
 => [70155104393020, 70155104393020, 70155104393020] 
>  p = q = r = []
 => [] 
>  [p, q, r].map(&:object_id)
 => [70155104367380, 70155104367380, 70155104367380] 
Run Code Online (Sandbox Code Playgroud)

什么有效

>  p, q, r = v = Array.new(3){ [] }
 => [[], [], []] 
>  v.map(&:object_id)
 => [70155104731780, 70155104731760, 70155104731740] 
Run Code Online (Sandbox Code Playgroud)