我有一个字符串数组。
array = ["foo","bar","baz"]
我正在尝试将其转换为以下内容:
{"foo"=>nil, "bar"=>nil, "baz" => nil}
我一直在这样做:
new_hash = {}
array.each { |k| new_hash[k] = nil }
new_hash
我想知道是否有任何方法可以在单行/没有任何实例变量的情况下完成此任务。
答案 0 :(得分:12)
这样可行:
new_hash = Hash[array.zip]
# => {"foo"=>nil, "bar"=>nil, "baz"=>nil}
答案 1 :(得分:2)
您可以使用Hash[]
:
1.9.3p194 :004 > Hash[%w[foo bar baz].map{|k| [k, nil]}]
=> {"foo"=>nil, "bar"=>nil, "baz"=>nil}
或tap
1.9.3p194 :006 > {}.tap {|h| %w[foo bar baz].each{|k| h[k] = nil}}
=> {"foo"=>nil, "bar"=>nil, "baz"=>nil}
答案 2 :(得分:1)
Hash[array.zip([nil].cycle)]
这个答案太短了。
答案 3 :(得分:0)
在一行中:
array.inject({}) { |new_hash, k| new_hash[k] = nil ; new_hash }
它不是很优雅,但它完成了工作。
是否有理由需要将哈希初始化?如果你只想要一个默认值为nil的哈希,Hash.new可以做到这一点。
Hash.new {|h, k| h[k] = nil}
答案 4 :(得分:0)
array.each_with_object({}) { |i,h| h[i] = nil }