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

时间:2012-02-24 15:50:04

标签: ruby

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

例如:

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

9 个答案:

答案 0 :(得分:54)

你可以:

a = ['a', 'b']
Hash[a.map {|v| [v,v.upcase]}]

答案 1 :(得分:23)

%w{a b c}.reduce({}){|a,v| a[v] = v.upcase; a}

答案 2 :(得分:5)

Ruby的each_with_object方法是做你想做的一种巧妙的方式

['a', 'b'].each_with_object({}) { |k, h| h[k] = k.upcase }

答案 3 :(得分:4)

这是一个天真而简单的解决方案,可将当前字符转换为要用作键的符号。而且只是为了好玩,它将价值看作是资本化。 :)

h = Hash.new
['a', 'b'].each {|a| h[a.to_sym] = a.upcase}
puts h

# => {:a=>"A", :b=>"B"}

答案 4 :(得分:4)

这是另一种方式:

>>> grouped_dict = {}
>>> for num, letter in data:
...     grouped_dict.setdefault(num, []).append(letter)
...
>>> grouped_dict
{1: ['A', 'B'], 2: ['A'], 3: ['C'], 4: ['D'], 5: ['B'], 6: ['D']}
>>>

答案 5 :(得分:3)

从哪种方面来看,你需要迭代初始数组。这是另一种方式:

a = ['a', 'b', 'c']
h = Hash[a.collect {|v| [v, v.upcase]}]
#=> {"a"=>"A", "b"=>"B", "c"=>"C"}

答案 6 :(得分:1)

不确定这是否是真正的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"}

答案 7 :(得分:0)

.map.to_h

[ 'a', 'b' ].map{ |element| [ element, element.upcase ] }.to_h
#=> {"a"=>"A", "b"=>"B"}

答案 8 :(得分:0)

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

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