如何将输入推送到哈希值?我的问题是我有多个密钥,所有密钥都引用了数组。
{"A"=>["C"], "B"=>["E"], "C"=>["D"], "D"=>["B"]}
如何将其他字符串推送到其中一个?例如,我想将"Z"
添加到密钥"A"
?
目前我要么覆盖前一个数组,要么所有数据都在一个数组中。
关于将数组["AB3", "DC2", "FG4", "AC1", "AF4"]
转换为{"A"=>["B", "C", "F"]}
的哈希值。
答案 0 :(得分:1)
任何命令<<, push, unshift
都可以完成任务
if h["A"]
h["A"] << "Z"
else
h["A"] = ["Z"]
end
答案 1 :(得分:0)
你说你原来的问题是将数组["AB3", "DC2", "FG4", "AC1", "AF4"]
转换为哈希{"A"=>["B", "C", "F"]}
,这可以这样做:
Hash[a.group_by { |s| s[0] }.map { |k, v| [k, v.map { |s| s[1] }] }]
或者像这样:
a.inject(Hash.new{|h, k| h[k]=[]}) { |h, s| h[s[0]] << s[1] ; h }
请注意,Hash.new{|h, k| h[k]=[]}
会创建一个默认值为[]
(空数组)的数组,因此您始终可以使用<<
向其中添加元素。< / p>
答案 2 :(得分:0)
更好的方法:
在Hash中添加一个新的类方法,如下所示:
class Hash
def add (k,v)
unless self.key?k
self[k] = [v]
else
self[k] = self[k] << v
end
self
end
end
h={}
h.add('A','B') #=> {"A"=>["B"]}
h.add('A','C') #=> {"A"=>["B", "C"]}
h.add('B','X') #=> {"A"=>["B", "C"], "B"=>["X"]}
完成。
根据您的确切问题,这可能更加惯用;比如,你想一次发送多个值,然后代码可以被干掉来处理多个参数。
希望这会有所帮助。
一切顺利。