qual è il modo migliore per rendere tale verifica profonda:rubino Hash includono un hash, Assegno profonda
{:a => 1, :b => {:c => 2, :f => 3, :d => 4}}.include?({:b => {:c => 2, :f => 3}}) #=> true
grazie
qual è il modo migliore per rendere tale verifica profonda:rubino Hash includono un hash, Assegno profonda
{:a => 1, :b => {:c => 2, :f => 3, :d => 4}}.include?({:b => {:c => 2, :f => 3}}) #=> true
grazie
mi sembra di vedere che cosa vuoi dire da che un esempio (in qualche modo). Controlliamo se ciascuna chiave nel subhash si trova nel superhash, quindi controlliamo se i valori corrispondenti di queste chiavi corrispondono in qualche modo: se i valori sono hash, esegui un altro controllo approfondito, altrimenti controlla se i valori sono uguali:
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
Si può vedere come questo funziona perché l'istruzione if
restituisce un valore: l'ultima affermazione valutata (non ho usato l'operatore condizionale ternario, perché questo renderebbe a questo punto più brutto e difficile da leggere).
sì, grazie! ... –
ho come questo:
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
Non è chiaro che cosa realmente vogliono questo codice per fare. Vuoi controllare se l'hash ha un valore che è un hash chiave inclusa: c con valore 2 e chiave: f con valore 3? Volete verificare che il valore hash per la chiave b: è un hash che include la chiave: c con valore 2 e la chiave: f con valore 3? O vuoi controllare che il valore hash per la chiave b: sia _exactly la chiave hash: c con valore 2 e la chiave: f con valore 3? Per favore spiega esattamente cosa vuoi - preferibilmente con alcuni esempi che restituiscono true, e alcuni che restituiscono false. – SamStephens