Ruby:从数组中的哈希调用获取值

时间:2015-12-30 19:12:31

标签: ruby-on-rails ruby

这可能是一个愚蠢的,但我在这里遗漏了一些东西......

我有这个

users = [{name: "chris"}, {name: "john"}]

这有效

users.map do |obj|
   puts obj[:name]
end

我想这样做

user.map(&:name)

试图以不同的方式触发符号而没有运气。我无法想出一种有意义的方法,但我觉得有一种方法。

3 个答案:

答案 0 :(得分:2)

为了能够使用user.map(&:name),您需要在数组中的每个对象上使用name方法。

哈希没有name方法,但你可以实现它(不要这样做,这只是一个例子):

class Hash
  def name
    self[:name]
  end
end

但更好的解决方案是为您的名字定义一个类。由于这种情况非常简单,Struct会这样做。

假设这些名称属于用户或客户,您可以执行以下操作:

User  = Struct.new(:name)
users = []

users << User.new('chris')
users << User.new('john')

user.map(&:name) # ['chris', 'john']

答案 1 :(得分:1)

Utitlies.sleep()

将为您提供所有名称的数组

答案 2 :(得分:0)

您可以使用基于lambdaproc的以下语法:

users = [{name: "chris"}, {name: "john"}]
p users.map(&->(i){i[:name]})

users = [{name: "chris"}, {name: "john"}]
p users.map(&proc{|i| i[:name]})

users = [{name: "chris"}, {name: "john"}]
name = proc{|i| i[:name]}
p users.map(&name)