誰かがハッシュにキーが存在するかどうかをチェックし、デフォルト値を与えない場合はルビーの方法で表示できますか?私はこれをしない限り、1つのライナーがあると仮定しているが、私は何を使用するか分からない。あなたはハッシュにそのデフォルト値を格納する必要がない場合はキーが存在しない場合デフォルト値を作成
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.fetch(key, "default value")
それとも、非既存のキーがnil
が返されるという事実活用:あなたはすでにハッシュを持っている場合は
h = Hash.new("default")
h.has_key?("jake")
=> false
h["jake"]
=> "default"
h["jake"] = "26"
h.has_key?("jake")
=> true
43
、あなたはこれを行うことができます
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
意志が割り当てられます
h
後
'default_value'
'default_value'
からnon_existing_key
セットを持っていますが割り当てられ
{:some_key=>"non_default_value", :non_existing_key=>"default_value"}
関連する問題
- 1. ノードが存在しない場合のデフォルト値の適用
- 2. Angular JSが存在しない場合、デフォルトで段落を作成します。
- 3. 値がない場合にキーを作成しない辞書
- 4. MySQLエラー番号150作成外キーが存在しない場合
- 5. 入力が存在しない場合にタイムラベルを作成
- 6. ファイルが存在しない場合にのみ作成する
- 7. SQLストアドプロシージャがSQLサーバーに存在しない場合は作成
- 8. Postgresデータベースが存在しない場合は作成
- 9. インデックスが存在しない場合のインデックスの作成
- 10. PHP mysqlデータベースが存在しない場合は作成する
- 11. GNUスクリーン接続が存在する場合、作成しない場合は
- 12. スキーマビルダー:存在しない場合はテーブルを作成
- 13. SQLiteが存在しない場合は新しいレコードを作成します
- 14. エリクシールマップチェックが空でない場合キーが存在する
- 15. キーが存在する場合:更新を、そうでない場合:連想
- 16. 存在する場合はファイルに追加し、存在しない場合は作成する
- 17. ルビー:それが存在する場合はRubyでは、デフォルト値
- 18. テーブルが存在する場合はドロップテーブルを作成し、存在しない場合は作成してください。
- 19. result.responseText.matchが存在しない場合
- 20. レコードが存在しない場合は、
- 21. Android新しいjsonファイルが存在しない場合の作成方法python
- 22. 新しいJava DBが存在しない場合、作成方法は?
- 23. ディレクトリが存在しない場合は作成してください
- 24. 値が存在しない場合にのみ挿入
- 25. 値が存在しない場合、MySQLの更新
- 26. mysqlはユーザが存在しない場合に作成します
- 27. データベースファイル(.sdf)が存在しない場合は作成しますか?
- 28. Codeigniterはディレクトリが存在しない場合に作成します
- 29. 存在しない場合 - CMDコマンド - 動作しない
- 30. Silverlightが存在しない場合のカスタム動作
h [key] ||を使用すると、 "デフォルト値"は保存されていませんが、すでにそこにfalseがある場合はオーバーライドされます – Sebastian
そのため、私はそれをいくつかの可能性の1つとして挙げました。一般的に、ブール値を保存しないことがわかっている場合、ハッシュの値がどのようなものになるかという考えが人々にあります。これは完璧な方法です。 –