Tengo la siguiente matriz
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
Quiero eliminar elementos en blanco de la matriz y quiero el siguiente resultado:
cities = ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
¿Hay algún método como compactese que lo haga sin bucles?

cities.reject!(&:empty?)cities.reject!(&:blank?)?empty?es para matricesblank?solo está disponible a través deActiveSupport. Standard Ruby usaString#empty?: ruby-doc.org/core-1.9.3/String.html#method-i-empty-3Frejectes mejor quereject!porque[].reject!(&:empty?)regresanil,[].reject(&:empty?)regresa[]fuente
blank?es una buena opción, pero es unrailsmétodo, y esta pregunta se refiere a la llanurarubyEsto es lo que funciona para mí:
salida:
fuente
:blank?es específico de Rails.NoMethodError: undefined method empty? for nil:NilClass,:blank?es mejor que:empty?:blankfunciona mejor que:empty. Porque:emptyno funciona paranilEn mi proyecto uso
delete:fuente
Cuando quiero ordenar una matriz como esta, uso:
Esto eliminará todos los elementos en blanco o nulos.
fuente
Más explícito
Esto eliminará los
nilvalores y los valores de cadena ("") vacíos .Por ejemplo:
fuente
Prueba esto:
fuente
Uso
reject:fuente
reject(&:empty?).nil.empty?ruptura de la pluma!reject(&:empty?)con,compactpor ejemplo,[nil, ''].compact.reject(&:empty?)La razón por la que desea utilizar
blank?másempty?es que reconoce en blanco nula, cadenas vacías, y un espacio en blanco. Por ejemplo:aún regresaría:
Y volverá
empty?a llamar , lo que probablemente quieras ser ." "falsetrueNota:
blank?solo se puede acceder a través de Rails, Ruby solo es compatibleempty?.fuente
Ya hay muchas respuestas, pero aquí hay otro enfoque si estás en el mundo de Rails:
fuente
present?proviene deActiveSupport. Esto tiene una etiqueta sin Rails y requiere una gema extra para un método parece excesivo.Aquí hay un enfoque más para lograr esto
podemos usar
presenceconselectfuente
" "elementos en mi matriz que no se eliminaron con el método de rechazo. Su método eliminadonil""o" "artículos.Aquí hay una solución si tiene tipos mixtos en su matriz:
Solución:
Salida:
fuente
Puedes probar esto
fuente
cities.reject!(&:blank?)fuente
Camino más corto
cities.select(&:present?)fuente
otro método:
fuente
Actualizar con un estricto con
join&splitEl resultado será:
Tenga en cuenta que: esto no funciona con una ciudad con espacios
fuente