Ich bin mir bewusst, wie funktioniert include?
, aber nicht wirklich klar mit multidimensionalen Array oder ein Hash (ist dies mit einem Hash möglich?)mit `include?` In Ruby zu überprüfen, ob etwas in einem Hash ist
Zum Beispiel gegeben ich einen Hash haben, die wie folgt aussieht:
@user.badges => [{:id => 1, :name => 'blahh', :description => 'blah blah blah'}, {:id => 2, :name => 'blahh', :description => 'blah blah blah'}]
Kann ich sehen, ob es ein Objekt mit der ID von 1 in es so ist?
if @user.badges.include?(:id => 1)
# do something
end
Es scheint nicht zu funktionieren, wie kann ich diese Methode richtig schreiben?
Dank bob! Ich denke, es war Wunschdenken, dass ich jeden Hash als Array behandeln könnte. –
Nun, die von Ihnen verwendete Syntax war aus zwei Gründen falsch. Erstes '(: id => 1)' wird nicht zu einem Ausdruck (oder irgendetwas anderem) aufgelöst. Und zweitens hast du 'Array # include?' Genannt, anstatt 'Hash # include?'. Und schließlich ist 'Hash # include?' Nur ein Alias für 'Hash # has_key?' –
Tatsächlich ist der (: id => 1) Teil syntaktisch gültig. Ruby erkennt dies als Abkürzung für ({: id => 1}), wie Sie sehen können, wenn Sie 'badges.include? (: Id => 1,: name => 'blahh',: description => 'blah bla bla ') ', die' wahr 'zurückgibt. Also das Problem hier, genauer gesagt, war, dass "Array # include?" Nur die exakte Übereinstimmung der Elemente, und Sie versuchten, eine teilweise Übereinstimmung zu tun. Also 'any?', Weil Sie einen Block statt nur einen Wert übergeben können. Wenn Sie den passenden Hash zurückgeben müssen, anstatt nur zu prüfen, ob einer existiert, ersetzen Sie 'any' durch' find'. –