Supprimer nul et vierge chaîne dans un tableau en Ruby
Je suis nouveau sur le Rubis et bloqué avec ce problème. Disons que j'ai un tableau comme ceci:
arr = [1, 2, 's', nil, '', 'd']
et je veux enlever nul et vierge de la chaîne d'elle, c'est à dire tableau final devrait être:
arr = [1, 2, 's', 'd']
J'ai essayé compact
mais ça donne ça:
arr.compact!
arr #=> [1, 2, 's', '', 'd'] doesn't remove empty string.
Je me demandais si il y a une façon intelligente de le faire en Ruby.
- Je l'ai vérifié, il n'a pas de néant, comment voulez-vous retirer de néant et le vide de la chaîne en même temps. Comment est-il double?
- vide? retourne true pour tous les deux nuls et " (ainsi que d'autres choses comme '/n'). Docs lien
- Oui,
blank?
fonctionne mais n'est pas disponible dans la plaine de Ruby. Il est livré avec des Rails. - Abraham, c'est dans les Rails pas en Ruby.
- Juste assez, je vais supprimer le doublon.
- Pourquoi downvote? les gens devraient au moins donner une explication d'un downvote, est-ce ainsi que l'aide à la communauté de nouvelles personnes?
compact
renvoie nouveau tableau, mais laisser le premier tableau, tel qu'il est, avecnil
à l'intérieur).compact!
changements de tableau existant et la retourne (si il n'y aura pasnil
elle renvoie nil). ruby-doc.org/core-2.0.0/Array.html#method-i-compact- Je l'ai lu, la seule question était de supprimer les chaînes vides et je ne sais pas pour les autres activités mentionnées dans les réponses. Ma question était claire, je pense, n'ont aucune idée de pourquoi les gens vont downvote pour aucune raison, sans expliquer quoi que ce soit.
- Je ne comprends pas les downvotes soit. Ce n'est pas un doublon (qui l'OMI n'est jamais une raison de downvote de toute façon), la question est clairement indiqué et il est clair que vous avez essayé de trouver votre propre solution.
- vide ne fonctionne pas en Ruby, j'espère que vous le savez. 🙂
- J'ai corrigé cette injustice pour vous. Et oui, je suis d'accord que ce serait bien si les gens vont expliquer leur downvotes.
- Je vais donner les débutants peu de temps pour respirer.
- merci 🙂
- Pourquoi cette question marqué comme un double? C'est clairement pas un doublon de la question référencés.
Vous devez vous connecter pour publier un commentaire.
Vous pourriez faire ceci:
Note
nil.to_s => ''
.Si
arr
peut contenir un autre type d'objet vide (e.g, tableau ou hachage) que vous souhaitez conserver, modifiere.to_s.empty?
àe.to_s == ''
Puisque vous voulez supprimer les deux
nil
et des chaînes vides, ce n'est pas un doublon de Comment puis-je supprimer le vide des éléments d'un tableau?Vous souhaitez utiliser
.reject
:REMARQUE:
reject
avec et sans bang se comporte de la même manière quecompact
avec et sans bang:reject!
etcompact!
modifier le tableau lui-même, tandis quereject
etcompact
retour une copie du tableau et laisser l'original intact.Si vous êtes à l'aide de Rails, vous pouvez également utiliser
blank?
. Il a été spécialement conçu pour fonctionner surnil
, de sorte que l'appel de la méthode devient:empty?
arr.reject &:blank?
.empty?
au lieu deblank?
arr.reject {|e| e.to_s == ''}
est probablement plus facile quee.nil? || e == ''
J'ai tendance à faire:
retourne:
Vous pouvez également utiliser
-
pour supprimer tous lesnil
et''
éléments:Démonstration
Ou
compact
etreject
avec le raccourci (dans le cas où vous n'êtes pas à l'aide de Rails où vous pouvez simplement utiliserarr.reject(&:blank?)
):Démonstration
Vous pouvez utiliser compact avec de rejeter
ou
Vous pouvez utiliser compact et delete_if méthode pour supprimer nul et vierge chaîne dans un tableau en Ruby
essayez ceci:
reject
, plutôt que deselect
, bot pour se débarrasser de!
et parce quecompact
est aussi une forme de rejet. Pour moi, "rejeter et de rejeter ce qui" se lit mieux que "rejeter cette et sélectionnez-le".Note: je suis en considérant le tableau pourrait avoir de la chaîne avec des espaces blancs dans il.
Que vous pouvez faire:
ou:
ou si vous voulez mettre à jour
arr
objet lui-même, puis:Espère que cela fonctionnera pour votre cas :
Je serais probablement ajouter
.strip
afin d'éliminer d'éventuels espaces maux de tête (en supposant que ce n'est pas une application rails).arr.reject(&:blank?)
Il suffit d'utiliser cette, pas besoin de rien d'autre.
blank
n'est pas une méthode Ruby, c'est un des Rails, de sorte que vous devez ajouter le active_support besoin de la bibliothèque, et la question a balisé Ruby pas de Rails. De toute façon, cette réponse énonce quelque chose de pointu avant.