Ruby数组要哈希:每个元素都是键,并从中派生出值

lul*_*ala 25 ruby

我有一个字符串数组,并希望从中得到一个哈希值.数组的每个元素都是键,我想从该键计算值.有没有Ruby方式这样做?

例如:

['a','b'] 转换为 {'a'=>'A','b'=>'B'}

Ric*_*ras 54

您可以:

a = ['a', 'b']
Hash[a.map {|v| [v,v.upcase]}]
Run Code Online (Sandbox Code Playgroud)

  • 这当然有效...但我不认为这是*效率最高的......在这种情况下你要迭代两次.当然不需要关注长度为2的数组,但仍然值得注意. (4认同)

bra*_*rad 22

%w{a b c}.reduce({}){|a,v| a[v] = v.upcase; a}
Run Code Online (Sandbox Code Playgroud)


Mar*_*mas 6

这是另一种方法:

a.zip(a.map(&:upcase)).to_h

#=>{"a"=>"A", "b"=>"B"}
Run Code Online (Sandbox Code Playgroud)


phi*_*kim 6

从 Rails 6.x 开始,您可以使用Enumerable#index_with

irb(main):002:0> ['a', 'b'].index_with { |s| s.upcase }
=> {"a"=>"A", "b"=>"B"}
Run Code Online (Sandbox Code Playgroud)


Kas*_*sel 5

无论你以哪种方式看待它,你都需要迭代初始数组。这是另一种方法:

a = ['a', 'b', 'c']
h = Hash[a.collect {|v| [v, v.upcase]}]
#=> {"a"=>"A", "b"=>"B", "c"=>"C"}
Run Code Online (Sandbox Code Playgroud)


aid*_*dan 5

Ruby的each_with_object方法是完成您想要的事情的一种巧妙方法

['a', 'b'].each_with_object({}) { |k, h| h[k] = k.upcase }
Run Code Online (Sandbox Code Playgroud)