-1

すべての値が空白のハッシュがあります。

hash_obj = {:username => '', :name => '', :phone => ''}

get_row_datas は、配列であるデータを取得しています。

[[john1, john2, 0123], [john3, john4, 345]]

これらの値を hash_obj に割り当てようとしています。

hash_array = {:username => 'john1', :name => 'john2', :phone => '0123'}, {:username => 'john3', :name => 'john4', :phone => ' 345'}

def get_hash_array
  first_row_data = get_first_row
  hash_obj = Hash.new
  first_row_data.each do |column|
    hash_obj[column.to_sym] = ''
  end

  hash_array = Hash.new

  row_datas = get_row_datas
  row_datas.each_with_index do |row, row_count|
    puts "Rows datas #{row} and row count is #{row_count}"
    hash_obj.each_with_index do |attribute, attribute_count|
      hash_obj[attribute] = row[attribute_count] //problem occurs
      puts "This is attribute #{attribute} and count #{attribute_count}"
      puts "#{row[attribute_count]}"
    end
  end

  hash_obj
end

私のコードを見ることができるので、値を割り当てる方法を尋ねたいのですが、エラーが発生します。RuntimeError:反復中に新しいキーをハッシュに追加できません

4

1 に答える 1

2

以下のテクニックも試すことができます:

hash_obj = {:username => '', :name => '', :phone => ''}
val = [[:john1, :john2, 0123], [:john3,:john4, 345]]

val.map{|i| Hash[hash_obj.keys.zip(i)]}
# => [{:username=>:john1, :name=>:john2, :phone=>83},
#     {:username=>:john3, :name=>:john4, :phone=>345}]

しかし、私はマップでそれをしました! マップではありませんが、何が原因か知っていますか?

原因は次のとおりです。

マップ { |アイテム| block } → new_ary :ブロックによって返された値を含む新しい配列を作成します。

hash_obj = {:username => '', :name => '', :phone => ''}
val = [[:john1, :john2, 0123], [:john3,:john4, 345]]
new_hash = val.map{|i| Hash[hash_obj.keys.zip(i)]}
val
# => [[:john1, :john2, 83], [:john3, :john4, 345]]

地図!{|アイテム| block } → ary : self の各要素に対して指定されたブロックを 1 回呼び出し、要素をブロックによって返された値に置き換えます。

hash_obj = {:username => '', :name => '', :phone => ''}
val = [[:john1, :john2, 0123], [:john3,:john4, 345]]
new_hash = val.map!{|i| Hash[hash_obj.keys.zip(i)]}
val
# => [{:username=>:john1, :name=>:john2, :phone=>83},
#     {:username=>:john3, :name=>:john4, :phone=>345}]
于 2013-06-23T06:46:59.770 に答える