Sono a conoscenza di come funziona include?
, tuttavia non è davvero chiaro utilizzarlo con un array multidimensionale o un hash (è possibile con un hash?)utilizzando `include?` In ruby per verificare se qualcosa è in un hash
Ad esempio, dato che ho un hash che assomiglia:
@user.badges => [{:id => 1, :name => 'blahh', :description => 'blah blah blah'}, {:id => 2, :name => 'blahh', :description => 'blah blah blah'}]
Posso vedere se ha un oggetto con l'id di 1 in esso come questo?
if @user.badges.include?(:id => 1)
# do something
end
Non sembra funzionare, come posso scrivere correttamente questo metodo?
Grazie bob! Immagino sia stato un pio desiderio poter trattare qualsiasi hash come un array. –
Beh, la sintassi che hai usato era sbagliata per due ragioni. Prima '(: id => 1)' non risolve un'espressione (o qualsiasi altra cosa per quella materia). E in secondo luogo, hai chiamato "Array # include?", Piuttosto che "Hash # include?". E infine, "Hash # include?" È semplicemente un alias per "Hash # has_key?" –
In realtà, la parte (: id => 1) è sintatticamente valida. Ruby riconosce questo come una scorciatoia per ({: id => 1}), come puoi vedere se fai 'badges.include? (: Id => 1,: name => 'blahh',: description => 'blah blah blah ') ', che restituirà' true'. Quindi il problema qui, più precisamente, era che "Array # include?" Esegue solo la corrispondenza esatta degli elementi e si stava tentando di eseguire una corrispondenza parziale. Quindi 'any?', Perché si passa a passarlo un blocco invece di un valore. Se è necessario restituire l'hash di corrispondenza, invece di controllare se ne esiste uno, si sostituirà "any?" Con 'find'. –