我有一个字符串数组,想要将其转换为哈希表。数组的每个元素将作为键,我想让值由该键计算而来。是否有一种用Ruby实现的方法?
例如: ['a','b'] 转换为 {'a'=> 'A','b'=> 'B'}
例如: ['a','b'] 转换为 {'a'=> 'A','b'=> 'B'}
你可以:
a = ['a', 'b']
Hash[a.map {|v| [v,v.upcase]}]
%w{a b c}.reduce({}){|a,v| a[v] = v.upcase; a}
Ruby的each_with_object
方法是一个很好的完成你想要的事情的方式。
['a', 'b'].each_with_object({}) { |k, h| h[k] = k.upcase }
从Rails 6.x开始,您可以使用Enumerable#index_with
:
irb(main):002:0> ['a', 'b'].index_with {|s| s.upcase}
=> {"a"=>"A", "b"=>"B"}
a.zip(a.map(&:upcase)).to_h
#=>{"a"=>"A", "b"=>"B"}
a = ['a', 'b', 'c']
h = Hash[a.collect {|v| [v, v.upcase]}]
#=> {"a"=>"A", "b"=>"B", "c"=>"C"}
h = Hash.new
['a', 'b'].each {|a| h[a.to_sym] = a.upcase}
puts h
# => {:a=>"A", :b=>"B"}
.to_h
传递一个块[ 'a', 'b' ].to_h{ |element| [ element, element.upcase ] }
#=> {"a"=>"A", "b"=>"B"}
感谢 @SMAG 的重构建议!
to_h
方法。示例代码如下:
[ 'a', 'b' ].to_h { |element| [ element, element.upcase ] } - SMAGto_h
方法。 - SMAG不确定这是否是真正的 Ruby 方法,但应该足够接近:
hash = {}
['a', 'b'].each do |x|
hash[x] = x.upcase
end
p hash # prints {"a"=>"A", "b"=>"B"}
def theFunk(array)
hash = {}
array.each do |x|
hash[x] = x.upcase
end
hash
end
p theFunk ['a', 'b', 'c'] # prints {"a"=>"A", "b"=>"B", "c"=>"C"}