Создать хеш из массива ключей - PullRequest
27 голосов
/ 10 марта 2012

Я посмотрел другие вопросы в SO и не нашел ответа на мою конкретную проблему.

У меня есть массив:

a = ["a", "b", "c", "d"]

Я хочу преобразовать этот массив в хеш, где элементы массива становятся ключами в хэше, и все они имеют одинаковое значение, равное 1. То есть хеш должен быть:

{"a" => 1, "b" => 1, "c" => 1, "d" => 1}

Ответы [ 9 ]

57 голосов
/ 10 марта 2012

Мое решение, одно из других: -)

a = ["a", "b", "c", "d"]
h = Hash[a.map {|x| [x, 1]}]
19 голосов
/ 01 мая 2015

Вы можете использовать product:

a.product([1]).to_h
#=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1}

Или вы также можете использовать transpose метод:

[a,[1] * a.size].transpose.to_h
#=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1}
4 голосов
/ 17 ноября 2015
a = ["a", "b", "c", "d"]

Еще 4 опции для достижения желаемого результата:

h = a.map{|e|[e,1]}.to_h
h = a.zip([1]*a.size).to_h
h = a.product([1]).to_h
h = a.zip(Array.new(a.size, 1)).to_h

Все эти опции основаны на Array # to_h , доступно в Ruby v2.1 или новее

4 голосов
/ 10 марта 2012
a = %w{ a b c d e }

Hash[a.zip([1] * a.size)]   #=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1, "e"=>1}
2 голосов
/ 10 марта 2012
["a", "b", "c", "d"].inject({}) do |hash, elem|
  hash[elem] = 1
  hash
end
2 голосов
/ 10 марта 2012

Здесь:

theHash=Hash[a.map {|k| [k, theValue]}]

Это предполагает, что, согласно вашему примеру выше, что a=['a', 'b', 'c', 'd'] и что theValue=1.

0 голосов
/ 01 декабря 2017
{}.tap{|h| %w(a b c d).each{|x| h[x] = 1}}
0 голосов
/ 27 апреля 2017
a = ['1','2','33','20']

Hash[a.flatten.map{|v| [v,0]}.reverse]
0 голосов
/ 10 марта 2012
a = ["a", "b", "c", "d"]
h = a.inject({}){|h,k| h[k] = 1; h}
#=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...