Ruby数组要哈希:每个元素都是键,并从中获取值
我有一个字符串数组,并希望从中产生一个哈希值。 数组的每个元素都是键,我想从该键计算值。 有没有Ruby方法这样做?
例如:
['a','b']
转换为{'a'=>'A','b'=>'B'}
Ruby的each_with_object
方法是一种巧妙的方式来做你想要的
['a', 'b'].each_with_object({}) { |k, h| h[k] = k.upcase }
您可以:
a = ['a', 'b'] Hash[a.map {|v| [v,v.upcase]}]
%w{abc}.reduce({}){|a,v| a[v] = v.upcase; a}
这是一个天真而简单的解决方案,可将当前字符转换为用作键的符号。 而且只是为了好玩,它将价值看作是资本化。 🙂
h = Hash.new ['a', 'b'].each {|a| h[a.to_sym] = a.upcase} puts h # => {:a=>"A", :b=>"B"}
无论你如何看待它,你都需要迭代初始数组。 这是另一种方式:
a = ['a', 'b', 'c'] h = Hash[a.collect {|v| [v, v.upcase]}] #=> {"a"=>"A", "b"=>"B", "c"=>"C"}
这是另一种方式:
a.zip(a.map(&:upcase)).to_h #=>{"a"=>"A", "b"=>"B"}
不确定这是否是真正的Ruby方式,但应该足够接近:
hash = {} ['a', 'b'].each do |x| hash[x] = x.upcase end p hash # prints {"a"=>"A", "b"=>"B"}
作为一个function,我们会这样:
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"}