10
votes

Split String supprimer tous les champs null

Je veux diviser une chaîne supprimer tous les champs null

Commande: P>

["1", "2", "3 3", "4 4 4"]


2 commentaires

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 ( "" ") est renvoyée lorsque deux valeurs ne correspondent pas au Regexp d'une ligne.


5 Réponses :


18
votes

Il y a un Rejeter Méthode dans Array : xxx

ou si vous préférez symbole # to_proc : xxx


3 commentaires

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?)



2
votes

Vous pouvez utiliser Split suivi de Sélectionnez :

",1,2,,3,4,,".scan(/[^,]+/)


0 commentaires

0
votes
",1,2,,3,4,,".split(/,/).reject(&:empty?)

",1,2,,3,,,4,,".squeeze(",").sub(/^,*|,*$/,"").split(",")

0 commentaires

0
votes

String # Split (motif) se comporte comme vous le souhaitez lorsque le motif est un seul espace ( Ruby-Doc ).

",1,2,,3,4,,".gsub(',', ' ').split(' ')


1 commentaires

HM ... Et si je veux que les espaces soient inclus dans les sous-chaînes? (", 1 2, 3 4 ,") qui ne fonctionnera pas



3
votes

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(',')


0 commentaires