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"}