使用数组中的键和标准值创建哈希

时间:2014-06-02 11:39:35

标签: ruby

我有一个这样的数组:

['a', 'b', 'c']

最简单的方法是:

{'a' => true, 'b' => true, 'c' => true}

true只是值应该保留的标准值。

8 个答案:

答案 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}