将数组转换为哈希,同时在 Ruby 中保留数组索引值



我有一个数组,里面有X数量的值。下面的数组只有 4 个,但我需要代码是动态的,而不是依赖于只有四个数组对象。

array = ["Adult", "Family", "Single", "Child"]

我想将array转换为如下所示的哈希:

hash = {0 => 'Adult', 1 => 'Family', 2 => 'Single', 3 => 'Child'}

哈希应具有与

数组具有对象一样多的键/值对,并且每个对象的值应从 0 开始并递增 1。

使用 Enumerable#each_with_index

Hash[array.each_with_index.map { |value, index| [index, value] }]
# => {0=>"Adult", 1=>"Family", 2=>"Single", 3=>"Child"}

正如@hirolau评论的那样,each_with_index.map也可以写成 map.with_index .

Hash[array.map.with_index { |value, index| [index, value] }]
# => {0=>"Adult", 1=>"Family", 2=>"Single", 3=>"Child"}

更新

使用Hash#invert的替代

Hash[array.map.with_index{|*x|x}].invert
# => {0=>"Adult", 1=>"Family", 2=>"Single", 3=>"Child"}
Hash[[*array.map.with_index]].invert
# => {0=>"Adult", 1=>"Family", 2=>"Single", 3=>"Child"}

另一个:

Hash[array.each_index.zip(array)]
#=> {0=>"Adult", 1=>"Family", 2=>"Single", 3=>"Child"}

较新的 Ruby 版本将允许:

array.each_with_index.to_h.invert
#=> {0=>"Adult", 1=>"Family", 2=>"Single", 3=>"Child"}
  Hash[*(0..array.size-1).to_a.zip(array)]
    => {0=>"Adult", 1=>"Family", 2=>"Single", 3=>"Child"} 

试试这个

array.each_with_index.inject({}){ |hash, (val, i)| hash[i]=val; hash }
=> {0=>"Adult", 1=>"Family", 2=>"Single", 3=>"Child"} 

相关内容

  • 没有找到相关文章

最新更新