ビュースクリプトに、配列の配列を反復処理するコードがあります。
<% @rows.each do |data| %>
<%= data[0] %>: <%= data[1] %><br>
<% end %>
data
キーで各アイテムを参照できるように、各配列をハッシュに簡単に変換するにはどうすればよいですか?
<%= data[:name] %>: <%= data[:email] %><br>
ビュースクリプトに、配列の配列を反復処理するコードがあります。
<% @rows.each do |data| %>
<%= data[0] %>: <%= data[1] %><br>
<% end %>
data
キーで各アイテムを参照できるように、各配列をハッシュに簡単に変換するにはどうすればよいですか?
<%= data[:name] %>: <%= data[:email] %><br>
次のような名前付きの値を持つ配列を参照できます。
<% @rows.each do |name,email| %>
<%= name %>: <%= email %><br />
<% end %>
@rows
これは、配列のすべてのメンバーが期待される2値配列になることを前提としています。
@Zachの答えは大丈夫ですが、あなたが求めたものに厳密に答えると、次のように行うことができます。
@rows2 = @rows.map { |row| Hash[[:name, :email].zip(row)] }
@Zachと@toklandは2つの素晴らしい答えを提供しました。プリミティブなハッシュと配列の構成に依存するのではなく、ファーストクラスのデータオブジェクトを作成すると便利な場合があります。 Struct
これには便利です:
irb> EmailTuple = Struct.new :name, :email
=> EmailTuple
irb> rows = [%w{foo foo@example.com}, %w{bar bar@example.com}]
=> [["foo", "foo@example.com"], ["bar", "bar@example.com"]]
irb> rows2 = rows.map{ |row| EmailTuple[ *row ] }
=> [#<struct EmailTuple name="foo", email="foo@example.com">, #<struct EmailTuple name="bar", email="bar@example.com">]
irb> rows2.map{ |tuple| "#{tuple.name} has email #{tuple.email}" }
=> ["foo has email foo@example.com", "bar has email bar@example.com"]