【发布时间】:2012-03-27 19:11:11
【问题描述】:
我查看了 SO 中的其他问题,但没有找到针对我的具体问题的答案。
我有一个数组:
a = ["a", "b", "c", "d"]
我想将此数组转换为散列,其中数组元素成为散列中的键,并且所有相同的值都说 1。即散列应该是:
{"a" => 1, "b" => 1, "c" => 1, "d" => 1}
【问题讨论】:
我查看了 SO 中的其他问题,但没有找到针对我的具体问题的答案。
我有一个数组:
a = ["a", "b", "c", "d"]
我想将此数组转换为散列,其中数组元素成为散列中的键,并且所有相同的值都说 1。即散列应该是:
{"a" => 1, "b" => 1, "c" => 1, "d" => 1}
【问题讨论】:
我的解决方案,其中之一:-)
a = ["a", "b", "c", "d"]
h = Hash[a.map {|x| [x, 1]}]
【讨论】:
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 或更高版本中可用
【讨论】:
a = %w{ a b c d e }
Hash[a.zip([1] * a.size)] #=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1, "e"=>1}
【讨论】:
这里:
hash = Hash[a.map { |k| [k, value] }]
根据上面的示例,这假定 a = ['a', 'b', 'c', 'd'] 和 value = 1。
【讨论】:
flatten,Hash[]可以带一个Array of Arrays。
Hash[ *[[1, 2], [3, 4]].flatten ]
["a", "b", "c", "d"].inject({}) do |hash, elem|
hash[elem] = 1
hash
end
【讨论】:
each_with_object 更适合这里。
:)
undefined method []=:P
a = ["a", "b", "c", "d"]
h = a.inject({}){|h,k| h[k] = 1; h}
#=> {"a"=>1, "b"=>1, "c"=>1, "d"=>1}
【讨论】:
a = ['1','2','33','20']
Hash[a.flatten.map{|v| [v,0]}.reverse]
【讨论】:
{}.tap{|h| %w(a b c d).each{|x| h[x] = 1}}
【讨论】: