wie vergleichen zum vorherigen Objekt in der `jeder` - iterator?
update: sorry, ich habe meine Feste Programm:
a = [ 'str1' , 'str2', 'str2', 'str3' ]
name = ''
a.each_with_index do |x, i |
if x == name
puts "#{x} found duplicate."
else
puts x
name = x if i!= 0
end
end
output:
str1
str2
str2 found duplicate.
str3
Gibt es eine andere schöne Art und Weise, in ruby
Sprache, das gleiche zu tun ?
btw, eigentlich. a
ist ein ActiveRecord::Relation
in meiner realen Fall.
Dank.
- versuchen Sie zu erklären mit Worten die Absicht, der code scheint buggy (vor allem, dass
x[i-1]
keinen Sinn macht). Der beste Weg: geben Sie einige Beispiele von Eingabe und erwartete Ausgabe. - danke, ich habe fix mein Programm.
- Hast each_cons noch geeignet?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem, das Sie haben könnte, mit
each_cons
ist, dass es durchläuftn-1
Paare (wenn die Länge der Enumerable istn
). In einigen Fällen bedeutet dies, dass Sie GESONDERT zu behandeln edge-cases für die ersten (oder letzten) element.In diesem Fall, es ist wirklich einfach zu implementieren Methode ähnlich
each_cons
, aber das würde die Ausbeute(nil, elem0)
für das erste element (im Gegensatz zueach_cons
, die Erträge(elem0, elem1)
:können Sie each_cons:
Können Sie
each_cons
Können Sie verwenden Enumerable#each_cons:
Als Sie wahrscheinlich wollen mehr tun, als
puts
mit den Duplikaten, ich würde lieber halten Sie die Duplikate in einer Struktur:Mehr auf: https://www.ruby-forum.com/topic/192355 (Coole Antwort von David A. Schwarz)