1707026604
2024-02-01 12:56:56
Ruby では、特定のキーがすでにハッシュに含まれているかどうかを確認したい場合があります。
ハッシュを初めて使用する場合は、次のように書きました。 Ruby ハッシュに関する基本的なブログ記事。
ハッシュのキーのチェックは Ruby API にすでに存在しますか?
指定されたハッシュに指定されたキーがあることを確認したい場合はどうすればよいでしょうか? コードを記述する前に、最初に考えるべきことは、「これは API のどこかに既に存在するかどうか」ということです。
ユーティリティ関数が欠落していることは非常にまれです。歴史的な理由から、抜粋は JavaScript のものである可能性があります。
しかし、Ruby の場合はそうではなく、Ruby-on-Rails 環境ではなおさらです。
Rubyコア: キーが存在するかどうかを確認するワンライナーの方法
Ruby をすでに知っている人のために、簡単な答えをここに示します
1
$> my_hash.key?("my_key")
Ruby : ブール値にキャストしてキーの存在を確認します
Ruby コンソールを起動します (Rails プロジェクトでは、「bin/rails console」と入力します)。
1
$> my_hash = {'a' => 40, a: 41, b: 'some_value'}
ちなみに、文字列は 'a' シンボルとは異なるキーとみなされます a:
キーが my_hash に属していることを確認したいので、素朴なアプローチは double を使用することです !! 任意の値をブール値に変換します。 これは、JavaScript などの他の言語で使用されるトリックです。
1
2
3
4
5
6
7
8
$> my_hash[:b]
'some_value'
$> my_hash[:c]
nil
$> !!my_hash[:b]
false
$> !!my_hash[:c]
true
Ruby ハッシュの特定のキーの存在を確認するためのより表現力豊かな方法
Ruby ハッシュには、最も一般的なユースケース向けの表現力豊かな API が備わっています。 .keyを使用できますか? !! の代わりにメソッドを使用します。 上に見られます。
他の開発者にとってもはるかに読みやすいものになっています。
例:
1
2
3
4
5
6
7
8
$> my_hash[:b]
'some_value'
$> my_hash[:c]
nil
$> my_hash.key?[:b]
false
$> my_hash.key?[:c]
true
Ruby-on-Rails : ハッシュにキーがあるかどうかを確認する
使用できます .has_key? 同じように。 意図がより明確になるため、私はこのソリューションを好みます。 ブール値を期待しているため、is_ または has_/have_ によってメソッドを開始する方が適切です。
1
2
3
4
5
6
7
8
$> my_hash[:b]
'some_value'
$> my_hash[:c]
nil
$> my_hash.has_key?[:b]
false
$> my_hash.has_key?[:c]
true
考えられる最も堅牢な答え
では、チェックしているハッシュがよくわからない場合はどうすればよいでしょうか。
ケース 1: キーがシンボルであるかどうかがわかりません。リモート API から抽出されたハッシュを考えてください。
1
2
$> my_hash.deep_symbolize_keys.try(:key?, :a)
true
ケース 2: それが実際にハッシュであるかどうかわかりません (nil または間違った型である可能性があります)
1
2
$> my_hash.try(:key?, :a)
true
状況によっては、これはオーバーエンジニアリングとみなされる可能性があることに注意してください。
結論
Ruby でハッシュにキーがあるかどうかを確認するのは非常に簡単です。必要なのは、この検証をどのようなコンテキストで記述しているかに少し注意を払うことだけです。
こちらもご覧ください それで質問。
#Rubyでハッシュにキーがあるかどうかを確認する方法