3

私は現在、テーブル内の特定のフィールドの配列を取得するために以下を使用しています。

Classrooms.all.map(&:teacher_name)

これにより、次が返されます。

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

代わりにハッシュが必要なので、teacher_idを含めることができる次のようなものです。

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

使用してみClassrooms.all.map(&:teacher_name, &:teacher_id)ましたが、構文エラーが発生します。

ありがとう!

4

3 に答える 3

5

昔ながらの方法でそれを行います:

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

..または何でも。

Rubyで、配列からハッシュを作成するにはどうすればよいですか?を参照してください。

于 2012-07-12T04:08:26.873 に答える
2

Ruby 2.6.0では、より短い構文が有効になっています。

Classrooms.all.to_h { |t| [t.teacher_name, t.teacher_id] }
于 2019-01-03T13:20:40.053 に答える
1

もう1つの方法は、それぞれをまったく使用しないことです。代わりにeach_with_objectを使用してください。それはあなたがやろうとしていることのために設計されています。

Classrooms.all.each_with_object({}) { |c, hash| hash[c.teacher_name] = c.teacher_id }
于 2012-07-12T12:01:35.650 に答える