2

配列の次元がわからない場合、配列をネストされたハッシュに変換するにはどうすればよいですか?

例えば:

[["Message", "hello"]]

に:

{{:message => "Hello"}}

または:

[["Memory", [["Internal Memory", "32 GB"], ["Card Type", "MicroSD"]]]]

に:

{{:memory => {:internal_memroy => "32 GB", :card_type => "MicroSD"}}}

また:

[["Memory", [["Internal Memory", "32 GB"], ["Card Type", "MicroSD"]]], ["Size", [["Width", "12cm"], ["height", "20cm"]]]]

に:

{ {:memory => {:internal_memroy => "32 GB", :card_type => "MicroSD"}, {:size => {:width => "12cm", :height => "20cm" } } }
4

2 に答える 2

1

ネストされたペアの配列の形式を考慮すると、次の関数はそれを希望のハッシュに変換します

def nested_arrays_of_pairs_to_hash(array)
  result = {}
  array.each do |elem|
    second = if elem.last.is_a?(Array)
      nested_arrays_to_hash(elem.last)
    else
      elem.last
    end
    result.merge!({elem.first.to_sym => second})
  end
  result
end

短いバージョン

def nested_arrays_to_hash(array)
  return array unless array.is_a? Array
  array.inject({}) do |result, (key, value)|
    result.merge!(key.to_sym => nested_arrays_to_hash(value))
  end
end
于 2013-03-06T11:02:23.677 に答える