在ruby中自动创建数组

Mat*_*rix 5 ruby arrays push

我想知道是否可以通过数组的自动创建来推送数组(如果还不存在),例如在PHP中:

$toto[] = 'titi';
Run Code Online (Sandbox Code Playgroud)

如果$ toto尚未定义,它将创建数组并将'titi'推入。如果已经存在,它将进行推送。

在Ruby中,我必须做:

toto ||= []
toto.push('titi')
Run Code Online (Sandbox Code Playgroud)

可以一行完成此操作吗?

因为如果我有一个循环,它将在第一次时测试“ || =”:

Person.all.each do |person|    
   toto ||= [] #with 1 billion of person, this line is useless 999 999 999 times...
   toto.push(person.name)
Run Code Online (Sandbox Code Playgroud)

你有更好的解决方案吗?

谢谢。

Kyl*_*yle 5

toto = Person.all.reduce([]) do |arr, person|
  arr << person.name
end
Run Code Online (Sandbox Code Playgroud)

或者如果它们来自数据库,您可以简单地提取名称

toto = Person.pluck(:name) # SELECT `people.name` FROM `people`
Run Code Online (Sandbox Code Playgroud)