我有一个字符串数组,并希望从中得到一个哈希值.数组的每个元素都是键,我想从该键计算值.有没有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)
bra*_*rad 22
%w{a b c}.reduce({}){|a,v| a[v] = v.upcase; a}
Run Code Online (Sandbox Code Playgroud)
这是另一种方法:
a.zip(a.map(&:upcase)).to_h
#=>{"a"=>"A", "b"=>"B"}
Run Code Online (Sandbox Code Playgroud)
从 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)
无论你以哪种方式看待它,你都需要迭代初始数组。这是另一种方法:
a = ['a', 'b', 'c']
h = Hash[a.collect {|v| [v, v.upcase]}]
#=> {"a"=>"A", "b"=>"B", "c"=>"C"}
Run Code Online (Sandbox Code Playgroud)
Ruby的each_with_object方法是完成您想要的事情的一种巧妙方法
['a', 'b'].each_with_object({}) { |k, h| h[k] = k.upcase }
Run Code Online (Sandbox Code Playgroud)