| 

.NET C# Java Javascript Exception

2
Hey,
wie entferne ich am besten doppelte Einträger aus einer Liste?
News:
07.09.2009
ruby-guy 61 2 3
1 Antwort
1
benutze einfach die .uniq methode der array klasse, diese gibt dir ein neues array zurück in dem jegliche duplikate entfernt wurden.

siehe
http://www.ruby-doc.org/core/classes/Array.html#M002214

Hier ein Beispiel um zuerst alle array-elemente in kleinschreibung zu konvertieren und dann die doppelten auszusortieren: (achtung: ich bin kein ruby programmierer, kann also sein das sich syntaxfehler einschleichen)

a.each_index { |i| a[i] = a[i].downcase }
a = a.uniq
07.09.2009
psychoschlumpf 77 1 2
Kann ich auch festlegen, wie "doppelt" definiert ist? Z.B. dass Groß-Kleinschreibung ignoriert wird.
ruby-guy 07.09.2009
du könntest vorher mit der "each" methode über das array iterieren und jeden string mit der "downcase" methode in kleinschreibung umwandeln, danach hast du keine groß/kleinschreibungsunterschiede mehr
psychoschlumpf 07.09.2009
3
[code]a.map(&:downcase).uniq [/code] waere moeglich, wenn du activesupport als require hast. Ich wuerds sonst so machen:
[code]a = a.map {|e| e.downcase}.uniq[/code]
riethmayer 07.09.2009
@riethmayer: Effizienter wäre [code]a.map!{|e| e.downcase}.uniq![/code], da so verhindert wird, dass temporäre Zwischenergebnisse erzeugt werden.

Wenn die Umwandlung in Kleinbuchstaben nicht erwünscht ist, würde sich die Verwendung von Enumerable#uniq_by aus der [url=http://facets.rubyforge.org/]Facets API[/url] anbieten:
[code]a = a.uniq_by {|e| e.downcase}[/code]
Oder ausgeschrieben:
[code]h = {}
a = a.inject([]) {|acc,elm| h[elm.downcase] ||= acc << elm}[/code]
reima 07.09.2009

Stelle deine Html-Frage jetzt!