使用空参数将数组转换为哈希

时间:2014-01-06 05:44:23

标签: ruby

我有一个数组:

arr = ["dog", "cat", "eel"]

我想把它转换成像这样的JSON:

'{"dog": {}, "cat": {}, "eel": {} }'

我尝试过像这样使用地图:

arr.map{ |a| { a => {} } }

然后使用.to_json,但它不太有用。

6 个答案:

答案 0 :(得分:2)

我这样使用each_with_object

h = arr.each_with_object({}) { |k,h| h[k] = { } }

然后你可以根据需要JSONifiy h

答案 1 :(得分:2)

使用Hash::[]替代方案:

arr = ["dog", "cat", "eel"]
Hash[arr.map { |key| [key,{}] }]
# => {"dog"=>{}, "cat"=>{}, "eel"=>{}}
puts JSON.dump(Hash[arr.map { |key| [key,{}] }])
# => {"dog":{},"cat":{},"eel":{}}

答案 2 :(得分:2)

in ruby​​ 2.1.0

 a = [...]
 a.map{|k| [k,{}] }.to_h

答案 3 :(得分:1)

简单的解决方案是:

arr = [...]
hash = {}
arr.each {|k| hash[k] = {} }

答案 4 :(得分:1)

arr = ["dog", "cat", "eel"]
@hash = {}

arr.collect{|a| @hash[a] ={}}

@hash.to_json 
# "{\"dog\":{},\"cat\":{},\"eel\":{}}"

您正在尝试将空哈希初始化为数组的每个元素,to_json不会像那样工作

答案 5 :(得分:1)

arr = ["dog", "cat", "eel"]

# For Hash
hash = arr.inject({}) {|h, element| h.update(element => {}) }
# => {"dog"=>{}, "cat"=>{}, "eel"=>{}}

# For JSON Hash
json_hash = arr.inject({}) {|h, element| h.update(element => {}) }.to_json
# => "{\"dog\":{},\"cat\":{},\"eel\":{}}"