我有一個散列:date => integer
。我需要更改這些值,但僅限於按鍵,才能滿足要求:date1 < key < date2
。什麼是一個優雅的方式來做到這一點?按鍵過濾散列並增加相應的值
回答
試着這麼做:
my_hash.each {|key, value| my_hash[key] += 1 if date1 < key and key < date2 }
這不會改變'my_hash [key]',它會改變塊內的本地'value',但這個改變不會反映在'my_hash'中。 –
是的,你是對的。固定! –
+1修復你的錯誤:) –
所以,你想要做的是減少了你的哈希值。你將遍歷你的散列並檢查每個關鍵字,如果它滿足條件,你將把這個關鍵字放入一個新值中,然後修改你想要的新值。否則,密鑰會以舊值進入新散列。
hash.reduce({}) do |memo,iter|
if iter[0] < Time.now
memo[iter[0]] = iter[1] + 1
else
memo[iter[0]] = iter[1]
end
memo
end
這是說什麼是迭代散列。當您使用reduce對迭代散列進行迭代時,它會將每個[key,value]對傳遞給該塊。因此,iter [0]是關鍵,iter [1]是值。現在我們測試關鍵字,如果條件滿足,則更改該值並將關鍵字和新值放入新哈希中。否則,將密鑰和舊值放入哈希中。修改後的新散列返回給reduce的下一次迭代。希望這可以幫助。
哦,看起來像我在寫這篇文章時,OP指定了一個可變的,非功能性的解決方案。我道歉。爲什麼需要更新就地更新? –
對我來說也可以,謝謝花時間!我+1你的答案。 – damluar
當迭代一個'Hash'時,你應該*真的*考慮使用解構綁定,它使得代碼更具可讀性。事實上,你必須花費整整兩句話來解釋這個問題應該是一個提示:'hash.reduce({})do | memo,(key,value)| ...結束' –
- 1. 增加散列值
- 2. 如何將一個散列鍵與另一個散列鍵相交併過濾掉匹配值?
- 3. 散列值的散列值按遞減順序還是遞增順序鍵值?
- 4. 散列的perl散列 - 對於eacy鍵組的內部鍵和相應的值
- 5. 按鍵值過濾json
- 6. 按鍵值過濾CKQuery
- 7. 添加散列鍵值
- 8. 自動增加perl散列中的數字鍵值?
- 9. Groovy:按值排序散列鍵值
- 10. 值增加鍵陣列JQ
- 11. 散列值遞增值
- 12. 如何通過散列的Perl散列中的值訪問鍵?
- 13. Redis通過散列值中的模式刪除散列鍵
- 14. 通過散列值替換散列中的鍵
- 15. 如何刪除散列表中的項目並相應地調整鍵值?
- 16. 如何根據散列中的鍵/值在Redis中查找並添加鍵/值數據到散列?
- 17. 如何通過值知道散列鍵?
- 18. 通過散列值添加散列和排序的陣列
- 19. 按鍵過濾字符串列表
- 20. 讓文件按照每列進行相應的過濾,並使用另一個列文件的值範圍
- 21. 嘗試遍歷散列,提取唯一鍵並添加值
- 22. jquery - 多個按鈕在點擊時增加相應的值
- 23. 如何快速過濾給定一組鍵的散列?
- 24. 如何按一列的值過濾行?
- 25. 通過字典集循環搜索一個鍵並增加值
- 26. Ruby修改並在散列數組中添加散列值
- 27. PHP - 按值過濾並省略循環
- 28. 散列數組並向其添加值
- 29. 查找鍵和合並的相應值
- 30. XMLSimple解析鍵值散列
必須是就地更新? – tokland
你是什麼意思?散列應該直接更新,而不是返回一個具有更新值的新散列。 – damluar
是的,這就是我的意思,只是爲了知道你是否想要一個功能性或必要的解決方案。 – tokland