Ruby array to hash: каждый элемент - ключ и выводит из него значение
У меня есть массив строк и хочу сделать хэш из него. Каждый элемент массива будет ключом, и я хочу, чтобы значение вычислялось из этого ключа. Есть ли способ Ruby сделать это?
Например:
['a','b'] для преобразования в {'a'=>'A','b'=>'B'}
Ответ 1
Вы можете:
a = ['a', 'b']
Hash[a.map {|v| [v,v.upcase]}]
Ответ 2
%w{a b c}.reduce({}){|a,v| a[v] = v.upcase; a}
Ответ 3
Здесь наивное и простое решение, которое преобразует текущий символ в символ, который будет использоваться в качестве ключа. И просто для удовольствия он капитализирует ценность.:)
h = Hash.new
['a', 'b'].each {|a| h[a.to_sym] = a.upcase}
puts h
# => {:a=>"A", :b=>"B"}
Ответ 4
Каким бы способом вы ни посмотрели на это, вам нужно будет итерации исходного массива. Здесь другой способ:
a = ['a', 'b', 'c']
h = Hash[a.collect {|v| [v, v.upcase]}]
#=> {"a"=>"A", "b"=>"B", "c"=>"C"}
Ответ 5
Не уверен, что это настоящий 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"}
Ответ 6
Ruby each_with_object метод - это аккуратный способ сделать то, что вы хотите