2010-10-13 3 views
25

я нашел этот код:удалить пробелы из каждого массива элементов рельсам

.each_key {|a| self[a].strip! if self[a].respond_to? :strip! } 

на этом сайте: http://granth.ca/2006/02/strip-whitespace

, но я полагаю, что для хэша, я пытаюсь сделать то же самое с массивом ,

Я пробовал несколько разных вещей, но не могу понять это.

Спасибо за любую помощь

ответ

58

Это то, что collect для.

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

в качестве альтернативы (изменится уже "зачищенные" строки в ноль ":.

yourArray.collect(&:strip)

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

+0

Я действительно новичок в Ruby, но не '.strip' никогда не должен возвращать' nil'. '.strip!', хотя возвращает 'nil', если он ничего не стягивает. Я могу подтвердить это с помощью интерактивной оболочки (irb). – Andy

+1

Можете ли вы объяснить, почему вы сделали '|| x'? – maahd

2

Практически то же самое, только вы меняете each_key к способу обработки каждый элемент массива (each) и self[a] к a (так как вам не нужно искать в хэш больше).

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

редактировать
Пример

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

Выход:

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

Нет на пробелы строки заканчивается больше.

+0

Я делаю row.each {| a | a.strip! если a.respond_to? : Полоса! } (и попробовал row2 = row.each {| a | a.strip! if a.respond_to?: strip!}, чтобы убедиться, что это не так, но элементы все еще имеют пробел. Не уверен, что это помогает, но я делаю это в файле csv, который я втягиваю в FasterCSV. Возможно, я мог бы очистить вывод CSV, но было бы полезно знать это в будущем в любом случае. –

+0

@Toby. Вы имеете в виду, что он не работает? –

+0

@Toby (обновленный комментарий) Проверьте, какие типы элементов массива имеют (например, 'puts x [0] .class'). Если это не строка, вы не можете использовать' strip! 'строки' метод на них –

6
YourArray.compact.collect(&:strip) 

Если у вас есть какой-то элемент с нуля

+2

FYI вы не хотите называть 'compact' на' Array'. Для вашего ответа поставьте что-то вроде 'a.compact.collect (&: strip)' или используйте 'yourArray', как в ответе Джейми. Я знаю, что вы идете на псевдокод, но полезно, чтобы вопросник был технически точным. –

+1

@ Ray-Toal, Вы правы! – Gvlamadrid

2

Я знаю, что это поздно, но нашел легкую команду для этого squish.

Выполнение myArray.map! {|a| a.squish} разделит все следующие и завершающие пробелы от каждого элемента массива.

+1

Просто, чтобы немного сократить его. 'MyArray.collect (&: мармелад)' –

Смежные вопросы