2010-10-13 19 views

Respuesta

58

Esto es para lo que collect es.

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

alternativamente (va a cambiar ya "pelados" cuerdas a cero ":.

yourArray.collect(&:strip)

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

+0

Soy realmente nuevo para Ruby, pero no es '.strip' nunca debería devolver' nil'. '.strip!' aunque devuelve 'nil' si no tira nada. Puedo confirmarlo con el shell interactivo (irb). – Andy

+1

¿Puedes explicar por qué hiciste el '|| x'? – maahd

2

Más o menos lo mismo, sólo cambia each_key a un método para procesar cada elemento del array (each) y self[a] a a (ya que no tiene que mirar en más de hash)

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

edición
Un ejemplo

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

Salida:

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

No hay espacios en blanco en cadena termina más.

+0

Estoy haciendo row.each {| a | ¡una tira! si a.respond_to? :¡tira! } (y han intentado row2 = row.each {| a | a.strip! if a.respond_to?: strip!} para asegurarse de que no era eso, pero los elementos aún tienen el espacio en blanco. No estoy seguro de que ayude, pero estoy haciendo esto en un archivo csv que estoy instalando con FasterCSV. Probablemente podría limpiar la salida CSV, pero sería útil saber esto para el futuro de todos modos. –

+0

@Toby ¿Quiere decir que no está funcionando? He publicado un ejemplo. –

+0

@Toby (al comentario actualizado) Compruebe qué tipo de elementos de la matriz tienen (por ejemplo, 'puts x [0] .class'). Si no es una cadena, no puede usar la cadena' strip' método en ellos. –

6
YourArray.compact.collect(&:strip) 

Si tiene algún elemento con nula

+2

FYI usted no desea llamar 'compact' en' Array' sí mismo. Para su respuesta, proporcione algo como 'a.compact.collect (&: strip)' o use 'yourArray' como en la respuesta de Jamie. Sé que vas a buscar un seudocódigo, pero es útil para el que pregunta que sea técnicamente preciso. –

+1

@ Ray-Toal, ¡Tienes razón! – Gvlamadrid

2

Sé que es tarde pero encontré un comando fácil para este squish.

Al hacer myArray.map! {|a| a.squish} se eliminarán todos los espacios en blanco siguientes y posteriores de cada elemento de la matriz.

+1

Solo para acortarlo un poco. 'myArray.collect (&: squish)' –

Cuestiones relacionadas