Подтвердить что ты не робот

Ruby array to hash: каждый элемент - ключ и выводит из него значение

У меня есть массив строк и хочу сделать хэш из него. Каждый элемент массива будет ключом, и я хочу, чтобы значение вычислялось из этого ключа. Есть ли способ Ruby сделать это?

Например:

['a','b'] для преобразования в {'a'=>'A','b'=>'B'}

4b9b3361

Ответ 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 метод - это аккуратный способ сделать то, что вы хотите

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

Ответ 7

Здесь другой способ:

a.zip(a.map(&:upcase)).to_h

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