Очистка пустых строк из массива - PullRequest
10 голосов
/ 26 апреля 2011

Я имею дело с множеством массивов из строк, и много раз я писал .delete_if { |str| str.empty? }

Теперь я знаю, что могу добавить этот метод в класс массива сам, но янадеясь, что есть встроенный способ сделать это без добавления нестандартных методов в базовые классы.Как бы ни было интересно добавлять методы в базовые классы, я не хочу делать это из соображений удобства обслуживания.

Есть ли встроенный метод для этого?

Ответы [ 7 ]

36 голосов
/ 26 апреля 2011

Есть краткая форма

array.delete_if(&:empty?)
6 голосов
/ 16 декабря 2013

Вы можете использовать этот метод:

    1.9.3p194 :001 > ["", "A", "B", "C", ""].reject(&:empty?)
    => `["A", "B", "C"]`

Обратите внимание, что вы можете использовать метод compact, если вам нужно только очистить массив от nils.

5 голосов
/ 26 апреля 2011

Ну, есть Array.delete . Однако он возвращает то, что удалено (или ноль, если ничего не удалено), что выглядит неуклюже. Но он доставляет и не терпит неудачу на нестроковых элементах:

ar = ['a', '', 2, 3, '']
p ar.delete('')  #=> ""
p ar             #=> ["a", 2, 3]
1 голос
/ 14 мая 2013

Вы можете сделать это

ar = ['a', '', 2, 3, '']
ar = ar.select{|a| a != ""}

Я надеюсь, что это сработает для вас

0 голосов
/ 10 октября 2014

Если вы также хотите удалить ноль:

arr = ['',"",nil,323]
arr.map!{|x|x==''?nil:x}.compact!

=> [323]

Карта, троичный оператор, компакт

0 голосов
/ 07 февраля 2014

Вы можете попробовать следующее решение. Я надеюсь, что это поможет вам.

array = ["", "", nil, nil, 2,3] array.delete_if (&: blank?) => [2,3]

0 голосов
/ 26 апреля 2011

Вы можете использовать .select!но вы все равно столкнетесь с той же проблемой.

Вместо того, чтобы модифицировать массив, вы можете вместо этого создать вспомогательный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...