你如何使用 map 来获取散列而不是数组?

Goa*_*lie 3 ruby ruby-on-rails

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

Classrooms.all.map(&:teacher_name)
Run Code Online (Sandbox Code Playgroud)

这将返回以下内容:

["James", "Josh", "Peter"]
Run Code Online (Sandbox Code Playgroud)

我想要的是一个散列而不是像下面这样的东西,我可以在其中包含教师 ID:

{"James" => "1", "Josh" => "2", "Peter" => "3"} 
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

小智 5

用老式的方法来做:

pairs = Classrooms.all.map {|t|
  [t.teacher_name, t.teacher_id]  # [key, value]
}
hash = Hash[pairs]                # in /old/ ruby: Hash[*pairs.flatten]
Run Code Online (Sandbox Code Playgroud)

.. 或诸如此类。

请参阅在 Ruby 中,如何从数组生成散列?