Je veux diviser une chaîne supprimer tous les champs null
Commande: P>
["1", "2", "3 3", "4 4 4"]
5 Réponses :
Il y a un Rejeter Méthode dans ou si vous préférez Array code>: symbole # to_proc code>: p>
J'ai trouvé une solution similaire: ", 1,2 , 3,4 ,". Split (','). Delete_if (&: vide?)
@vanuan je voterais sur cette réponse si vous l'avez écrit @nikita, cela pourrait être simplifié en utilisant S.empty? Plutôt, comparer à la chaîne vide et rendu plus froid en appliquant le symbole # to_proc truc Vanuan utilisé dans son commentaire. C'est-à-dire la réécriture du rejet comme .reject &: vide?
Même plus court: ", 1,2 , 3,4 ,". Split (','). Rejeter (&: vide?)
",1,2,,3,4,,".split(/,/).reject(&:empty?)
",1,2,,3,,,4,,".squeeze(",").sub(/^,*|,*$/,"").split(",")
String # Split (motif) se comporte comme vous le souhaitez lorsque le motif est un seul espace ( Ruby-Doc ).
",1,2,,3,4,,".gsub(',', ' ').split(' ')
HM ... Et si je veux que les espaces soient inclus dans les sous-chaînes? (", 1 2, 3 4 ,") qui ne fonctionnera pas
Espérant illuminer un peu ici:
mais les résultats de "Split (/ S / S / S /)" et "Split ('')" ne sont pas identiques. Pourquoi c'est ça? P> BlockQuote>
Si vous regardez les docs pour la chaîne # Split, vous verrez que Split avec '' est un cas spécial: p>
xxx pré> Vous mentionnez également: P>
Je m'attends à ne pas produire de chaînes vides. Je pense que c'est un bug dans Ruby ou mon malentendu. P> BlockQuote>
Le problème réside probablement entre le clavier et la chaise. ; -) p>
Split produira heureusement des cordes vides comme il se doit, car il y a des moments où vous voudrez certainement cette capacité, et il y a beaucoup de moyens faciles à contourner. Considérez si vous divisiez un CSV à partir d'un fichier Excel. N'importe où que vous voyez "," serait une colonne vide, pas une colonne que vous devriez simplement vous débarrasser de. P>
Peu importe, vous avez vu un tas de solutions - et voici un autre qui pourrait vous montrer la Choses que vous pouvez faire avec Ruby et Split! P>
Il semble que vous souhaitiez scinder des données entre plusieurs commises em>, alors pourquoi ne pas essayer cela et voir ce qui se passe? P> xxx pré>
C'est une expression régulière assez simple: /, + / désigne une ou plusieurs virgules, donc nous allons nous scinder sur cela. P>
Cela donne presque que vous voulez que vous souhaitiez, Sauf que vous voulez aussi ignorer le champ vide principal. Vous noterez que la division ignore le champ vide à la fin, car (à partir de la chaîne # Split Docs): P>
a = ",1,2,,3,4,,5,,,,6,,,".gsub(/,+/,',').gsub(/^,/,'').split(',')
Pas un expert rubis, mais semble être Stackoverflow.com/questions/3774509/ELIMINATION-NILLINES est La même question plus ou moins, où vous mappez la suppression sur le tableau, parlez de timing.
Il est étrange pour moi aussi qu'une chaîne vide (
"" " code>) est renvoyée lorsque deux valeurs ne correspondent pas au Regexp d'une ligne.