任何人都可以給我看一個紅寶石的方式來檢查一個密鑰是否存在於一個散列中,如果它沒有給它一個默認值。我假設有一個班輪使用,除非這樣做,但我不確定要使用什麼。如果密鑰不存在創建默認值
29
A
回答
11
如果您不需要存儲默認值成散列你可以用Hash#fetch
方法:
hash = {}
hash.fetch(:some_key, 'default-value') # => 'default-value'
p hash
# => {}
如果你除了需要每次訪問不存在的關鍵時間存儲您的默認值,你「再一個初始化,您可以使用Hash#new
與塊做哈希:
hash = Hash.new { |hash, key| hash[key] = 'default-value' }
hash[:a] = 'foo'
p hash[:b]
# => 'default-value'
p hash
# => { :a => 'foo', :b => 'default-value' }
15
構造哈希類的接受默認值,相同的,如果匹配的密鑰沒有發現將被退回。
h = Hash.new("default")
h.has_key?("jake")
=> false
h["jake"]
=> "default"
h["jake"] = "26"
h.has_key?("jake")
=> true
43
如果你已經有了一個哈希,你可以這樣做:
h.fetch(key, "default value")
或者你能夠利用這樣一個事實:不存在的鍵返回nil
:
h[key] || "default value"
創建哈希與默認值取決於你想要做什麼。
的關鍵獨立,不會被保存:
h = Hash.new("foo") h[1] #=> "foo" h #=> {}
依賴於密鑰,將存儲:
h = Hash.new { |h, k| h[k] = k * k } h[2] #=> 4 h #=> {2=>4}
3
如果要存儲的默認值這可能是零,你需要計算它在儲存時間:
hash = {}
...
hash.fetch(key) {|k| hash[k] = calc_default()}
1
如果您希望將默認值分配給哈希如果鍵不存在(還),你可以使用||=
運營商,即:
h = {some_key: 'non_default_value'}
value = h[:some_key] ||= 'default_value'
value2 = h[:non_existing_key] ||= 'default_value'
value
將被分配'non_default_value'
和value2
會被分配'default_value'
這些任務後h
將有non_existing_key
設置爲'default_value'
:
{:some_key=>"non_default_value", :non_existing_key=>"default_value"}
相關問題
- 1. 默認密鑰庫文件不存在?
- 2. Redis獲取密鑰或設置爲默認值(如果不存在)
- 3. 如果密鑰不存在,則設置關聯數組的默認值
- 4. cassandra創建密鑰空間如果不存在不工作
- 5. 在Silverlight中防止密鑰默認值
- 6. 如何設計/創建密鑰/值存儲的密鑰?
- 7. heapq.merge默認密鑰?
- 8. RC522默認密鑰
- 9. 如果不存在,Angular JS默認創建段落
- 10. 創建默認值
- 11. 哈希默認值取決於密鑰
- 12. 如果沒有值,字典不會創建密鑰
- 13. HSET如果存在密鑰
- 14. 如果密鑰在字典中有僞造值,則獲取默認值
- 15. nodejs,redis。檢查密鑰是否存在,如果不存在則創建新的
- 16. scala - 創建一個可變映射,默認值爲(0,0)如果鍵不存在
- 17. 爲緩存創建密鑰
- 18. 默認控制器密鑰
- 19. 使用pkcs11Interop創建3DES密鑰並輸出密鑰值或創建密鑰值用於創建
- 20. 創建相同的密鑰值不同
- 21. Vagrant SSH默認密鑰密碼?
- 22. XSLT默認變量值(如果值不存在)
- 23. Django的URL - 默認值,如果值不存在
- 24. 如何爲密鑰創建一個值
- 25. 默認值時創建
- 26. Django的創建行,如果超密鑰不存在,否則更新
- 27. 什麼是價值,如果在.putExtra(「鑰匙」,布爾)的密鑰不存在
- 28. 用戶默認值不註冊新密鑰?
- 29. 如果頭像文件不存在,如何創建默認頭像?
- 30. PHP - filter_input - 設置爲默認值,如果獲取密鑰沒有設置
使用h [鍵] || 「默認值」不保存,如果在那裏已經有假,它將被覆蓋 – Sebastian 2012-06-16 07:05:16
這就是爲什麼我將它列爲幾種可能性之一。一般人們都知道他們的哈希值會是什麼樣子,如果你知道你不會保存布爾值,那麼這是一個非常好的方法。 – 2012-06-16 09:10:22