你如何使用map来获取哈希而不是数组?

时间:2012-07-12 04:00:24

标签: ruby-on-rails ruby

我目前正在使用以下内容来获取表格中某个字段的数组:

Classrooms.all.map(&:teacher_name)

返回以下内容:

["James", "Josh", "Peter"]

我想要的是哈希,所以我可以在下面包含teacher_id:

{"James" => "1", "Josh" => "2", "Peter" => "3"} 

我尝试使用Classrooms.all.map(&:teacher_name, &:teacher_id),但它给我一个语法错误。

谢谢!

3 个答案:

答案 0 :(得分:3)

以老式的方式做到:

pairs = Classrooms.all.map {|t|
  [t.teacher_name, t.teacher_id]  # [key, value]
}
hash = Hash[pairs]                # in /old/ ruby: Hash[*pairs.flatten]

..或诸如此类的。

请参阅In Ruby, how do I make a hash from an array?

答案 1 :(得分:1)

另一种选择是不要使用每种方法。请改用each_with_object。它专为您的目标而设计。

Classrooms.all.each_with_object({}) { |c, hash| hash[c.teacher_name] = c.teacher_id }

答案 2 :(得分:1)

Ruby 2.6.0启用shorter syntax

Classrooms.all.to_h { |t| [t.teacher_name, t.teacher_id] }