Создание множества массивов в одной строке
Мне нужно сделать что-то вроде следующего
e = []
m = []
p = []
t = []
...and so on for about 10 different arrays
Есть ли способ создать все эти массивы на одной строке?
Ответы
Ответ 1
Вы можете сделать это, используя следующее:
e,m,p,t... = Array.new(10) { [] }
Оказывается,
[[]]*10
- это не правильный путь, [[]]*10
предназначен для повторения и просто повторяет один и тот же объект []
10 раз, поэтому все переменные в конечном итоге будут назначены одному и тому же объекту.
Ответ 2
Как объявление нескольких переменных в одной строке a1, a2, a3 = 3, 10, 4
e, m, p, t ... = [], [], [], [] ...
Ответ 3
Мне любопытно, что такое 10 разных массивов, потому что я подозреваю, что они не должны быть 10 различными переменными, а всего лишь одним. Вы не даете никакого контекста, поэтому я могу только догадываться, что-то вроде следующего может быть лучше:
whatever = Hash.new{|h, k| h[k] = []}
whatever[:e] # => []
whatever[:m] << 42
whatever[:m] # => [42]
# etc...
В противном случае, как писал zomboid:
e, m, p, t ... = [], [], [], [] ...
Ответ 4
Что все не удается
> 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]
Что работает
> p, q, r = v = Array.new(3){ [] }
=> [[], [], []]
> v.map(&:object_id)
=> [70155104731780, 70155104731760, 70155104731740]