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 compact
ese 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-3Freject
es mejor quereject!
porque[].reject!(&:empty?)
regresanil
,[].reject(&:empty?)
regresa[]
fuente
blank?
es una buena opción, pero es unrails
método, y esta pregunta se refiere a la llanuraruby
Esto 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?
:blank
funciona mejor que:empty
. Porque:empty
no funciona paranil
En 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
nil
valores 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,compact
por 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 ." "
false
true
Nota:
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
presence
conselect
fuente
" "
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
&split
El resultado será:
Tenga en cuenta que: esto no funciona con una ciudad con espacios
fuente