2013-04-09 20 views
10

Mam ciąg znaków, w którym używam .split ("'), aby podzielić ciąg znaków na tablicę słów. Czy mogę zamiast tego użyć podobnej metody, aby podzielić ciąg na tablicę 2 słów?Jak podzielić ciąg na tablicę wielu słów?

Zwraca tablicę gdzie każdy element jest jedno słowo:

words = string.split(' ') 

Czekam na powrót tablicę gdzie każdy element ma 2 wyrazy zamiast.

+0

Jak chcesz leczyć nieparzysta Liczba słów? Upuścić ostatnie słowo? Upuścić pierwsze słowo? Zatrzymaj to? –

+0

możliwy duplikat [Potrzeba podzielenia tablic na podrzędne tablice o określonym rozmiarze w Ruby] (http://stackoverflow.com/questions/3864139/need-to-split-arrays-to-sub-arrays-of-specified-size -in-ruby) –

+1

Markthomas czy ty nawet przeczytać pytanie –

Odpowiedz

7
str = 'one two three four five six seven' 
str.split.each_slice(2).map{|a|a.join ' '} 
=> ["one two", "three four", "five six", "seven"] 

ten obsługuje również przypadek nieparzystej liczby słów.

+0

Próbuję dowiedzieć się, jak mogę to zredukować do czegoś takiego jak 'str.split.each_slice (2) .map (&: join)' ale nie mogę uzyskać argumentu '' '' na 'join' . –

+0

Joe: Lepiej otworzyć osobne pytanie. Podpowiedź: not &: but inline {| t | t.join ('')} –

+1

Dziękuję za komentarz @SimonB. ale komentarz był głównie moim własnym komentarzem do mojej własnej odpowiedzi. Odpowiedź odzwierciedla już twoją podpowiedź, starałem się uczynić to bardziej zwięzłym. –

3

Coś jak to powinno działać:

string.scan(/\w+ \w+/) 
+0

'str = 'one1! two2 @ three3 # four4 $ five5% six6^'output' []'. Nie wiem, czy wszystkie słowa są alfabetyczne: –

+1

Być może "string.scan (/ \ S + \ S + /)" byłoby lepsze. – oldergod

+0

Brak odpowiedzi na pytanie, jak deptać nieparzystą liczbę słów. Nie wiem. –

4

Można zrobić

string= 'one1! [email protected] three3# four4$ five5% six6^ sev' 
string.scan(/\S+ ?\S*/) 
# => ["one1! [email protected]", "three3# four4$", "five5% six6^", "sev"] 
+0

Nie, jeśli ostatnie słowo jest pojedynczym znakiem. –

+0

@JoeFrambach dziękuję, poprawiono. – oldergod

+1

Czy zamienisz '?' Na '\ s *', to zachowa on również oryginalne spacje między wyrazami. –

2

Ruby scan jest przydatna dla:

'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"] 
2

To wszystko, co musiałem zrobić:

def first_word 
    chat = "I love Ruby" 
    chat = chat.split(" ") 
    chat[0] 
end