我正在寻找一种更好的方法
if hash.key? :a &&
hash.key? :b &&
hash.key? :c &&
hash.key? :d
Run Code Online (Sandbox Code Playgroud)
最喜欢的东西
hash.includes_keys? [ :a, :b, :c, :d ]
Run Code Online (Sandbox Code Playgroud)
我想出来了
hash.keys & [:a, :b, :c, :d] == [:a, :b, :c, :d]
Run Code Online (Sandbox Code Playgroud)
但我不喜欢两次添加数组
Mor*_*ori 104
%i[a b c d].all? {|s| hash.key? s}
Run Code Online (Sandbox Code Playgroud)
Joh*_*hat 20
@ Mori的方式是最好的,但这是另一种方式:
([:a, :b, :c, :d] - hash.keys).empty?
Run Code Online (Sandbox Code Playgroud)
要么
hash.slice(:a, :b, :c, :d).size == 4
Run Code Online (Sandbox Code Playgroud)
Mar*_*mas 14
只是在TIMTOWTDI的精神中,这是另一种方式.如果你require 'set'(在std lib中)那么你可以这样做:
Set[:a,:b,:c,:d].subset? hash.keys.to_set
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式获取缺失密钥的列表:
expected_keys = [:a, :b, :c, :d]
missing_keys = expected_keys - hash.keys
Run Code Online (Sandbox Code Playgroud)
如果您只想查看是否有任何丢失的密钥:
(expected_keys - hash.keys).empty?
Run Code Online (Sandbox Code Playgroud)
我喜欢这种方式解决这个问题:
subset = [:a, :b, :c, :d]
subset & hash.keys == subset
Run Code Online (Sandbox Code Playgroud)
它快速而清晰.
| 归档时间: |
|
| 查看次数: |
26558 次 |
| 最近记录: |