cách tốt nhất để thực hiện kiểm tra sâu như vậy là gì:ruby Hash bao gồm một băm, sâu kiểm tra
{:a => 1, :b => {:c => 2, :f => 3, :d => 4}}.include?({:b => {:c => 2, :f => 3}}) #=> true
nhờ
cách tốt nhất để thực hiện kiểm tra sâu như vậy là gì:ruby Hash bao gồm một băm, sâu kiểm tra
{:a => 1, :b => {:c => 2, :f => 3, :d => 4}}.include?({:b => {:c => 2, :f => 3}}) #=> true
nhờ
Tôi nghĩ tôi xem những gì bạn có nghĩa là từ đó là một ví dụ (bằng cách nào đó). Chúng tôi kiểm tra xem mỗi khóa trong subhash có trong superhash hay không và sau đó kiểm tra xem các giá trị tương ứng của các khóa này có khớp với nhau hay không: nếu giá trị là băm, hãy thực hiện một kiểm tra sâu khác, nếu không, hãy kiểm tra xem các giá trị có bằng nhau hay không:
class Hash
def deep_include?(sub_hash)
sub_hash.keys.all? do |key|
self.has_key?(key) && if sub_hash[key].is_a?(Hash)
self[key].is_a?(Hash) && self[key].deep_include?(sub_hash[key])
else
self[key] == sub_hash[key]
end
end
end
end
Bạn có thể thấy cách làm việc này vì báo cáo kết quả if
trả về một giá trị: báo cáo kết quả cuối cùng đánh giá (tôi không sử dụng các nhà điều hành có điều kiện ternary vì đó sẽ làm cho điều này xa xấu xí và khó khăn hơn để đọc).
vâng, cảm ơn! ... –
Tôi thích cái này:
class Hash
def include_hash?(other)
other.all? do |other_key_value|
any? { |own_key_value| own_key_value == other_key_value }
end
end
end
Đó là chưa rõ ràng những gì bạn thực sự muốn mã này để làm. Bạn có muốn kiểm tra xem giá trị băm có giá trị là băm bao gồm khóa: c với giá trị 2 và khóa: f có giá trị 3 không? Bạn có muốn kiểm tra giá trị băm cho khóa b: là băm bao gồm khóa: c với giá trị 2 và khóa: f có giá trị 3 không? Hoặc bạn có muốn kiểm tra giá trị băm cho khóa b: là _exactly khóa băm: c với giá trị 2 và khóa: f có giá trị 3 không? Vui lòng giải thích chính xác những gì bạn muốn - tốt nhất là với một số ví dụ đã trả về đúng sự thật và một số ví dụ sẽ trả về sai. – SamStephens