如何將輸入推送到散列值?我的問題是我得到了多個鍵,並且他們都引用了數組。散列值的數組
{"A"=>["C"], "B"=>["E"], "C"=>["D"], "D"=>["B"]}
如何將另一個字符串推到其中之一上?例如,我想添加一個"Z"
到密鑰"A"
的數組?
目前我要麼覆蓋前面的數組,要麼所有的數據都在一個。
它關於將數組["AB3", "DC2", "FG4", "AC1", "AF4"]
轉換爲{"A"=>["B", "C", "F"]}
的散列。
如何將輸入推送到散列值?我的問題是我得到了多個鍵,並且他們都引用了數組。散列值的數組
{"A"=>["C"], "B"=>["E"], "C"=>["D"], "D"=>["B"]}
如何將另一個字符串推到其中之一上?例如,我想添加一個"Z"
到密鑰"A"
的數組?
目前我要麼覆蓋前面的數組,要麼所有的數據都在一個。
它關於將數組["AB3", "DC2", "FG4", "AC1", "AF4"]
轉換爲{"A"=>["B", "C", "F"]}
的散列。
任何命令<<, push, unshift
會做一份工作
if h["A"]
h["A"] << "Z"
else
h["A"] = ["Z"]
end
你說你原來的問題是在陣列["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]=[]}
創建一個默認值爲[]
(空數組)的數組,因此您將始終可以使用<<
向其添加元素。
更好的方法:
在哈希添加一個新的類方法如下:
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"]}
完成。
根據您的確切問題,這可能更具慣用性;比如說,你想要一次發送多個值,那麼代碼可以被DRY-ed來處理多個參數。
希望這會有所幫助。
一切順利。
它不這樣工作。問題是沒有數組推入當前「未定義的方法」<<「爲零:NilClass」 我的代碼 '計數器在0 ..($ graph.size)-1做 #Key wird erstellt temp_start = $圖表[計數器] [0,1] temp_finish = $圖表[計數器] [1,1] 放temp_start 看跌temp_finish $ routen [temp_start] << temp_finish 端 end' – user1446375
然後只是檢查價值的存在 –
非常感謝你!我完全是新的編程和紅寶石,所以我沒有來這個簡單的解決方案:) – user1446375