Как удалить пустые элементы из массива? - PullRequest
261 голосов
/ 04 мая 2011

У меня есть следующий массив

cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]

Я хочу удалить пустые элементы из массива и хочу получить следующий результат:

cities = ["Kathmandu", "Pokhara", "Dharan", "Butwal"]

Есть ли такой метод, как compact, который будет делать это без циклов?

Ответы [ 17 ]

9 голосов
/ 05 июня 2015

Вот еще один подход для достижения этого

мы можем использовать presence с select

cities = ["Kathmandu", "Pokhara", "", "Dharan", nil, "Butwal"]

cities.select(&:presence)

["Kathmandu", "Pokhara", "Dharan", "Butwal"]
8 голосов
/ 15 марта 2013

Вот решение, если у вас есть смешанные типы в вашем массиве:

[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]
4 голосов
/ 05 мая 2014

Вы можете попробовать это

 cities.reject!(&:empty?)
2 голосов
/ 01 марта 2017

Кратчайший путь cities.select(&:present?)

2 голосов
/ 04 мая 2011
 cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].delete_if {|c| c.empty? } 
0 голосов
/ 11 января 2019

другой метод:

> ["a","b","c","","","f","g"].keep_if{|some| some.present?}
=> ["a","b","c","f","g"]
0 голосов
/ 10 апреля 2017

Обновление со строгим с join & split

cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
cities.join(' ').split

Результат будет:

["Kathmandu", "Pokhara", "Dharan", "Butwal"]

Обратите внимание: это не работает с городом с пробелами

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