我有一个这样的数组:
['a', 'b', 'c']
最简单的方法是:
{'a' => true, 'b' => true, 'c' => true}
true
只是值应该保留的标准值。
答案 0 :(得分:7)
下面怎么样?
2.1.0 :001 > ['a', 'b', 'c'].each_with_object(true).to_h
=> {"a"=>true, "b"=>true, "c"=>true}
答案 1 :(得分:3)
尝试:
Hash[ary.map {|k| [k, true]}]
从Ruby 2.0开始,您可以使用to_h
方法:
ary.map {|k| [k, true]}.to_h
答案 2 :(得分:2)
根据您的具体需求,您可能实际上并不需要初始化值。您只需以这种方式创建一个默认值为true
的哈希:
h = Hash.new(true)
#=> {}
然后,当您尝试访问之前不存在的密钥时:
h['a']
#=> true
h['b']
#=> true
优点:使用的内存更少,初始化速度更快。
缺点:实际上并不存储密钥,因此散列将为空,直到其他代码存储其中的值。如果您的程序依赖于从哈希中读取键或想要遍历哈希值,那么这只会是一个问题。
答案 3 :(得分:1)
['a', 'b', 'c'].each_with_object({}) { |key, hash| hash[key] = true }
答案 4 :(得分:1)
另一个
> Hash[arr.zip Array.new(arr.size, true)]
# => {"a"=>true, "b"=>true, "c"=>true}
答案 5 :(得分:1)
您还可以使用Array#product:
['a', 'b', 'c'].product([true]).to_h
#=> {"a"=>true, "b"=>true, "c"=>true}
答案 6 :(得分:0)
以下代码将执行此操作:
hash = {}
['a', 'b', 'c'].each{|i| hash[i] = true}
希望这会有所帮助:)
答案 7 :(得分:0)
如果你切换到Python,那很容易:
>>> l = ['a', 'b', 'c']
>>> d = dict.fromkeys(l, True)
>>> d
{'a': True, 'c': True, 'b': True}