我有一个字符串格式的数字数组,我想将它们转换为哈希,其中键是数字,值是数组中这些数字的位置。例如:
["1", "5", "3"]
应该导致:
{ 1 => 0, 5 => 1, 3 => 2 }
我有以下代码,有效:
my_hash = {}
my_array.each do |number_string|
my_hash[number_string.to_i] = my_array.index(number_string)
end
遍历数组并将每个值及其位置推送到哈希值。
有更短更优雅的方式吗?也许类似于Ruby的to_a
函数,但更像是to_h(options)
。
答案 0 :(得分:4)
Hash[["1", "5", "3"]
.map.with_index{|e, i| [e.to_i, i]}]
# => {1=>0, 5=>1, 3=>2}
或
["1", "5", "3"]
.each_with_object({}).with_index{|(e, h), i| h[e.to_i] = i}
# => {1=>0, 5=>1, 3=>2}
答案 1 :(得分:1)
arr = ["1", "5", "3"]
ha = Hash[arr.map.with_index {|a, i| [a.to_i, i]}]
puts "ha: #{ha.inspect}"
irb(main):038:0> arr=["1", "5", "3"]
=> ["1", "5", "3"]
irb(main):039:0> Hash[arr.map.with_index {|a, i| [a, i]}]
=> {"1"=>0, "5"=>1, "3"=>2}
irb(main):040:0> Hash[arr.map.with_index {|a, i| [a.to_i, i]}]
=> {1=>0, 5=>1, 3=>2}