J'ai le tableau suivant
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
Je souhaite supprimer des éléments vides du tableau et souhaite le résultat suivant:
cities = ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
Existe-t-il une méthode comme compact
celle-ci qui le fera sans boucles?
cities.reject!(&:empty?)
cities.reject!(&:blank?)
?empty?
est pour les tableauxblank?
est uniquement disponible viaActiveSupport
. Ruby standard utiliseString#empty?
: ruby-doc.org/core-1.9.3/String.html#method-i-empty-3Freject
est mieux quereject!
parce que[].reject!(&:empty?)
retournenil
,[].reject(&:empty?)
retourne[]
la source
blank?
est un bon choix mais c'est unerails
méthode, et cette question concerne la plaineruby
Voici ce qui fonctionne pour moi:
production:
la source
:blank?
est spécifique à Rails.NoMethodError: undefined method empty? for nil:NilClass
,:blank?
c'est mieux que:empty?
:blank
fonctionne mieux que:empty
. Parce:empty
que ne fonctionne pas pournil
Dans mon projet j'utilise
delete
:la source
Quand je veux ranger un tableau comme celui-ci, j'utilise:
Cela supprimera tous les éléments vides ou nuls.
la source
Le plus explicite
Cela supprimera les
nil
valeurs et les valeurs de chaîne (""
) vides .Par exemple:
la source
Essaye ça:
la source
Utilisation
reject
:la source
reject(&:empty?)
.nil.empty?
pause booom!reject(&:empty?)
parcompact
exemple[nil, ''].compact.reject(&:empty?)
La raison pour laquelle vous souhaitez utiliser
blank?
plusempty?
que vide reconnaît nulle, des chaînes vides, et l' espace blanc. Par exemple:reviendrait toujours:
Et d' appeler
empty?
le" "
sera de retourfalse
, que vous voulez probablement êtretrue
.Remarque:
blank?
est uniquement accessible via Rails, Ruby ne prend en charge queempty?
.la source
Il y a déjà beaucoup de réponses mais voici une autre approche si vous êtes dans le monde Rails:
la source
present?
vient deActiveSupport
. Cela n'a pas de balise Rails et nécessiter une gemme supplémentaire pour une méthode semble excessif.Voici une autre approche pour y parvenir
nous pouvons utiliser
presence
avecselect
la source
" "
éléments de mon tableau n'avaient pas été supprimés avec la méthode de rejet. Votre méthode a suppriménil
""
ou des" "
éléments.Voici une solution si vous avez des types mixtes dans votre tableau:
Solution:
Production:
la source
Vous pouvez essayer ceci
la source
cities.reject!(&:blank?)
la source
Chemin le plus court
cities.select(&:present?)
la source
une autre méthode:
la source
Mettre à jour avec un strict avec
join
&split
Le résultat sera:
Notez que: cela ne fonctionne pas avec une ville avec des espaces
la source