我有一条记录,我想将它插入到数组中,然后再访问它。
users = User.all
results = []
users.each do |user|
results << {:name => user.name, :email => user.email}
end
结果变量仍然是一个数组吗?如果是,我怎样才能得到所有的名字和电子邮件?
我有一条记录,我想将它插入到数组中,然后再访问它。
users = User.all
results = []
users.each do |user|
results << {:name => user.name, :email => user.email}
end
结果变量仍然是一个数组吗?如果是,我怎样才能得到所有的名字和电子邮件?
是的,它仍然是一个数组。您可以稍后拥有您想要的东西,例如:
results.each do |result|
result[:name] # access to name
result[:email] # access to email
end
您的示例将创建一个数组results
,其中填充了包含每个用户名和电子邮件的哈希值。
您可以通过多种方式访问它,其中最简单的是一个简单的循环:
results.each do |result|
name = result[:name]
email = result[:email]
end
您还可以像这样直接访问单个项目:
first_result_name = results[0][:name]
但要小心尝试访问可能不存在的结果。
但我不得不问,你为什么要这样做?将所有User
s 名称和电子邮件分配给一个数组没有任何好处,User.all 在功能上并没有什么不同。
你只需要一条线就可以了
results = users.collect{|user| {:name => user.name, :email => user.email}}
以一种不相关的方式,您的初始代码可以重写为:
results = User.all.inject([]) do |array, user|
array << {:name => user.name, :email => user.email}
end
鉴于“结果”现在包含这个哈希集合,如果你想打印每个用户名和电子邮件,你会这样做:
results.each do |user|
puts "#{user[:name]} #{user[:email]}"
end