如何在Ruby中使用索引将数组转换为哈希?

svdrlsy4  于 2023-04-20  发布在  Ruby
关注(0)|答案(3)|浏览(122)

我想转换这个数组:

["Cyan", "Magenta", "Yellow", "Black"]

像这样散列:

{1 => "Cyan", 2 => "Magenta", 3 => "Yellow", 4 => "Black"}

如何在Ruby语言中使用它?
我试过用这个密码

color = ["Cyan", "Magenta", "Yellow", "Black"]
var.each_with_object({}) do |color_hash| 
   color_hash 
end

但我有个错误,正确的代码是什么?

gr8qqesn

gr8qqesn1#

您的方法是正确的,可以将Enumerable#each_with_objectEnumerator#with_index结合使用:

colors = %w[Cyan Magenta Yellow Black]

colors.each_with_object({}).with_index(1) { |(color, result), id| result[id] = color }
# => {1=>"Cyan", 2=>"Magenta", 3=>"Yellow", 4=>"Black"}

由于您使用ruby-on-rails标记了您的问题,因此可以使用Enumerable#index_by(同样使用普通Ruby Enumerator#with_index

colors = %w[Cyan Magenta Yellow Black]

colors.index_by.with_index(1) { |_, id| id }
# => {1=>"Cyan", 2=>"Magenta", 3=>"Yellow", 4=>"Black"}
epfja78i

epfja78i2#

这个可能有用

["Cyan", "Magenta", "Yellow", "Black"].each_with_index.map {|e, i| [i+1, e] }.to_h
r1zhe5dt

r1zhe5dt3#

a = %w[Cyan Magenta Yellow Black]

p a.map.with_index(1) { |value, index| [index, value] }.to_h

输出

{1=>"Cyan", 2=>"Magenta", 3=>"Yellow", 4=>"Black"}

另一条路

colors = %w[Cyan Magenta Yellow Black]
color_map = Hash[(1..colors.size).to_a.zip(colors)]
p color_map

相关问题