2017-07-27 54 views
0

我正在接受一個字符串並將其分開,然後將地圖鏈接起來。我希望任何長度等於或大於5個字母的單詞逆轉。如何在塊中使用具有多個語句的地圖

如果我這樣做

str.split(' ').map { |word| word} 

它會返回一個數組裏面所有的話。

如果我這樣做,雖然

str.split(' ').map { |word| words; word.reverse if word.length >= 5 } 

所有我回來是反轉的話。那麼我該怎麼做呢?

備註 - 我試圖理解如何正確使用塊,並在取得一些進展的同時,我仍然不完全流利。

+0

你可以給一個輸入/輸出的例子嗎? – GolfWolf

+1

另外,什麼是「單詞」? – GolfWolf

+0

「那我該怎麼做呢?」 - 你是什麼意思,「兩個」? –

回答

6

這個呢?

str.split.map { |word| word.length >= 5 ? word.reverse : word } 
+0

是的,那是有效的,我今天早些時候剛剛讀過三元運算符,但我沒有把它看作是合適的。 ! – stuartambient

+0

這個工作的原因是Ruby使用最後一個語句的結果作爲塊的返回值,if語句在一種情況下返回nils,你需要的是一個返回一個單詞的結構,不管它是什麼(反向或以其他方式),這就是三元組的功能。 –

2
str.split.map { |word| word.tap { |w| w.reverse! if w.length >= 5 } } 

上,我們總是回到一個詞本身的文字使用Object#tap,而它的被逆轉就地當它足夠長的時間。

您的方法失敗,因爲後綴if意味着當條件未滿足時返回nil

+1

雖然這段代碼可能回答這個問題,爲這個問題爲什麼和/或如何回答這個問題提供了額外的背景,從而提高了它的長期價值。 – Aurril

+0

感謝您對我的if語句的解釋。該解決方案也適用。我會在水龍頭上閱讀。 – stuartambient

相關問題