J'ai une chaîne que j'utilise .split ('') sur pour diviser la chaîne en une gamme de mots. Puis-je utiliser une méthode similaire pour diviser la chaîne en une matrice de 2 mots à la place?
retourne un tableau où chaque élément est un mot: p> Je cherche à retourner un tableau où chaque élément est 2 mots. P> p>
5 Réponses :
Quelque chose comme ça devrait fonctionner:
str = 'one1! Two2 @ Three3 # Four4 Five4 $ cinq6 ^ ' Code> sorties [] code>. Je ne sais pas si les mots sont tous alphabétiques
Peut-être que string.scan (/ \ s + \ s + /) code> serait mieux.
Il est également sans réponse à savoir comment marcher un nombre impair de mots. Je ne sais pas.
Probablement / \ s + \ s + \ s + / code> parce que vous ne savez pas nécessairement que c'est un espace entre les mots.
OP ne répond pas, il se pourrait qu'ils veulent littéralement diviser sur des espaces. Qui sait ... Je ne passe plus de temps à ce sujet.
Ceci échoue le simple test de 'A b C'.Scan (/ \ w + \ w + /) => ["A B"] code>
Il est sans réponse Comment traiter un nombre impair de mots.
str = 'one two three four five six seven'
str.split.each_slice(2).map{|a|a.join ' '}
=> ["one two", "three four", "five six", "seven"]
This also handles the case of an odd number of words.
J'essaie de comprendre comment je peux réduire cela à quelque chose comme str.split.each_slice (2) .map (&: rejoindre) code> mais je ne peux pas obtenir le '' < / code> argument sur le rejoindre code>.
Joe: Il vaut mieux ouvrir une question distincte. Astuce: non &: Mais à la place inline {| t | t.join ('')}
Merci pour le commentaire @simonb. Mais le commentaire était surtout mon propre commentaire à moi-même sur ma propre réponse. La réponse reflète déjà votre indice, j'essayais de faire plus de terrains.
Vous pouvez faire
string= 'one1! two2@ three3# four4$ five5% six6^ sev' string.scan(/\S+ ?\S*/) # => ["one1! two2@", "three3# four4$", "five5% six6^", "sev"]
Pas si le dernier mot est un seul caractère.
Est-ce que vous remplacez le `?` avec \ s * code>, il conservera également l'espacement d'origine entre les mots.
@Joshuacheek désolé je ne comprends pas. Qu'entendez-vous par le blanchiment d'origine?
@Oldergod si c'était "one1! \ t deux2 @" code>, cela conserverait l'onglet et les espaces supplémentaires (l'affichage d'un espace de l'exemple n'existait que de nombreux)
's Scan CODE> est utile pour cela: 'a b c'.scan(/\w+(?:\s+\w+)?/)
=> ["a b", "c"]
'a b c d e f g'.scan(/\w+(?:\s+\w+)?/)
=> ["a b", "c d", "e f", "g"]
C'est tout ce que je devais faire:
Comment voulez-vous traiter un nombre impair de mots? Déposer le dernier mot? Déposer le premier mot? Garde le?
duplicaté possible de Needez-vous Sub Tableaux de taille spécifiée dans Ruby
Markthomas avez-vous même lu la question