将数组转换为格式为{value =>的哈希值position_in_array}

时间:2014-05-18 04:01:54

标签: ruby ruby-2.0

我有一个字符串格式的数字数组,我想将它们转换为哈希,其中键是数字,值是数组中这些数字的位置。例如:

["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)

2 个答案:

答案 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}