2017-07-27 52 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

相关问题