У меня есть следующий массив
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
Я хочу удалить пустые элементы из массива и хочу получить следующий результат:
cities = ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
Есть ли такой метод, как compact, который будет делать это без циклов?
compact
Вот еще один подход для достижения этого
мы можем использовать presence с select
presence
select
cities = ["Kathmandu", "Pokhara", "", "Dharan", nil, "Butwal"] cities.select(&:presence) ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
Вот решение, если у вас есть смешанные типы в вашем массиве:
[nil,"some string here","",4,3,2]
Решение:
[nil,"some string here","",4,3,2].compact.reject{|r| r.empty? if r.class == String}
Выход:
=> ["some string here", 4, 3, 2]
Вы можете попробовать это
cities.reject!(&:empty?)
Кратчайший путь cities.select(&:present?)
cities.select(&:present?)
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].delete_if {|c| c.empty? }
другой метод:
> ["a","b","c","","","f","g"].keep_if{|some| some.present?} => ["a","b","c","f","g"]
Обновление со строгим с join & split
join
split
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"] cities.join(' ').split
Результат будет:
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
Обратите внимание: это не работает с городом с пробелами