2010-10-13 7 views

risposta

58

Questo è ciò che è collect.

yourArray.collect{|x| x.strip || x }

in alternativa (cambierà stringhe già "spogliato" a zero ":.

yourArray.collect(&:strip)

http://apidock.com/ruby/Array/collect

+0

Sono davvero nuovo in Ruby, ma non '.strip' non dovrebbe mai restituire' nil'. '.strip!' sebbene restituisca 'nil' se non ha rimosso nulla. Posso confermarlo con la shell interattiva (irb). – Andy

+1

Puoi spiegare perché hai fatto il '|| x'? – maahd

2

Praticamente lo stesso, solo si cambia each_key a un metodo per elaborare ogni elemento di array (each) e self[a]-a (dal momento che non c'è bisogno di guardare in hash più).

.each {|a| a.strip! if a.respond_to? :strip! } 

modificare
Un esempio

x = [" 1 ", "b", " c ", 5] 
x.each {|a| a.strip! if a.respond_to? :strip! } 
puts x.inspect 

uscita:

["1", "b", "c", 5] 

Nessun spazi bianchi sulla stringa termina più.

+0

Sto facendo row.each {| a | a.strip! se a.respond_to? :striscia! } (e ho provato row2 = row.each {| a | a.strip! if a.respond_to?: strip!} per assicurarsi che non fosse quello, ma gli elementi hanno ancora lo spazio bianco. Non è sicuro che aiuti, ma sto facendo questo su un file CSV che sto inserendo con FasterCSV, probabilmente potrei ripulire l'output CSV, ma sarebbe comunque utile sapere questo per il futuro. –

+0

@Toby Vuoi dire che non funziona? Ho pubblicato un esempio: –

+0

@Toby (a commento aggiornato) Controlla quali sono gli elementi di tipo array (ad esempio, 'puts x [0] .class'). Se non è una stringa, non puoi usare' strip '! metodo –

6
YourArray.compact.collect(&:strip) 

Se avete qualche elemento con nil

+2

Per tua informazione non vuoi chiamare 'compact' su' Array' stesso. Per la tua risposta fornisci qualcosa come 'a.compact.collect (&: strip)' o usa 'yourArray' come nella risposta di Jamie. So che stai per uno pseudocodice, ma è utile che l'interlocutore sia tecnicamente preciso. –

+1

@ Ray-Toal, Hai ragione! – Gvlamadrid

2

So che è tardi ma ho trovato un comando facile per questo squish.

Fare myArray.map! {|a| a.squish} rimuoverà tutti gli spazi bianchi seguenti e finali da ogni elemento dell'array.

+1

Giusto per accorciarlo un po '. 'MyArray.collect (&: squish)' –

Problemi correlati