Ich habe zahlreiche Fragen dazu gesehen, aber nur mit einem Schlüssel, niemals für mehrere Schlüssel.Ruby entfernen doppelte Einträge in Array von Hashes, aber basierend auf mehr als einem Wert
Ich habe folgendes Array von Hashes:
a = [{:name=>"Yes, Yes, Yes", :artist=>"Some Dude", :composer=> 'First Dude', :duration=>"3:21"},
{:name=>"Chick on the Side", :artist=>"Another Dude", :duration=>"3:20"},
{:name=>"Luv Is", :duration=>"3:13"},
{:name=>"Yes, Yes, Yes", :artist=>"Some Dude", :composer=> 'First Dude', :duration=>"2"},
{:name=>"Chick on the Side", :artist=>"Another Dude"}]
a.uniq
wird hier nicht funktionieren, weil die Dauer unterschiedlich ist oder vielleicht nicht einmal existieren. Ich habe einen eindeutigen Schlüssel in der Datenbank eingerichtet, der keine doppelten Einträge mit demselben Namen, Interpret und Composer zulässt, so dass ich manchmal Fehler erhalte, wenn Leute doppelte Einträge für diese 3 Schlüssel haben.
Gibt es eine Möglichkeit, uniq
zu laufen, die für diese 3 Schlüssel prüfen würde? Ich habe versucht, einen Block wie folgt aus:
new_tracks.uniq do |a_track|
a_track[:name]
a_track[:artist]
a_track[:composer]
end
Aber das alles ignoriert, wenn der Schlüssel nicht vorhanden ist (jeder Eintrag ohne Komponist die oben genannten Kriterien zum Beispiel nicht erfüllt).
Ich könnte immer nur den :name
Schlüssel verwenden, aber das würde bedeuten, dass ich potenziell gültige Titel in Compilations loswerde, die denselben Titel, aber einen anderen Interpreten oder Komponisten haben.
Dies ist mit Ruby 2.0.
Großartig verwenden möchten, ** vielen Dank! ** Die erste funktioniert gut: '.uniq {| track | [Titel [: Name], Titel [: Künstler], Titel [: Komponist]]. join (":")} '. Der zweite gibt mir einen Fehler 'SyntaxError: unerwartet '}', erwartet ']''. Wenn ich das behebe, dann bekomme ich 'undefined Methode' Attribute''. Aber der Erste macht den Trick. Danke noch einmal. – kakubei
Ich habe den Syntaxfehler behoben. –
Ich bekomme immer noch undefined Methode 'Attribute'' für diese Zeile ... – kakubei