У меня есть следующий массив
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
Я хочу удалить пустые элементы из массива и хочу следующий результат:
cities = ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
Есть ли такой способ compact
сделать это без петель?
cities.reject!(&:empty?)
cities.reject!(&:blank?)
?empty?
для массивовblank?
доступен только черезActiveSupport
. Стандартный Ruby используетString#empty?
: ruby-doc.org/core-1.9.3/String.html#method-i-empty-3Freject
лучше чемreject!
потому что[].reject!(&:empty?)
возвращаетсяnil
,[].reject(&:empty?)
возвращается[]
источник
blank?
- хороший выбор, но этоrails
метод, и этот вопрос относится к равнинеruby
Вот что работает для меня:
вывод:
источник
:blank?
, специфичной для Rails.NoMethodError: undefined method empty? for nil:NilClass
,:blank?
лучше:empty?
:blank
работает лучше чем:empty
. Потому:empty
что не работает дляnil
В моем проекте я использую
delete
:источник
Когда я хочу привести в порядок массив, я использую:
Это удалит все пустые или нулевые элементы.
источник
Наиболее явный
Это удалит как
nil
значения, так и пустые значения string (""
).Например:
источник
Попробуй это:
источник
Используйте
reject
:источник
reject(&:empty?)
.nil.empty?
бум перерыв!reject(&:empty?)
с ,compact
например[nil, ''].compact.reject(&:empty?)
Причина, по которой вы хотите использовать
blank?
более,empty?
заключается в том, что пробел распознает ноль, пустые строки и пробелы. Например:все равно вернется
И , призвав
empty?
на" "
ВЕРНЕТСЯfalse
, который вы , вероятно , хотите бытьtrue
.Примечание:
blank?
доступно только через Rails, Ruby поддерживает толькоempty?
.источник
Ответов уже много, но вот другой подход, если вы находитесь в мире Rails:
источник
present?
приходит отActiveSupport
. У него нет тега Rails, и требование дополнительного гема для одного метода кажется чрезмерным.Вот еще один подход для достижения этой цели
мы можем использовать
presence
сselect
источник
" "
В моем массиве были некоторые элементы, которые не были удалены с помощью метода отклонения. Ваш метод удаленnil
""
или" "
элементы.Вот решение, если у вас есть смешанные типы в вашем массиве:
Решение:
Вывод:
источник
Вы можете попробовать это
источник
cities.reject!(&:blank?)
источник
Кратчайший путь
cities.select(&:present?)
источник
другой метод:
источник
Обновление со строгим с
join
&split
Результат будет:
Обратите внимание: это не работает с городом с пробелами
источник