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

この場合はどうなりますか?それは十分な長さだとき、それはインプレースを逆転されている間、私たちは常に言葉自体を返す言葉にObject#tapを使用して

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

はい、それはうまくいきました。私は今日の三元演算子で読んでいましたが、私はそれをフィットとして見ませんでした。 ! – stuartambient

+0

これは、Rubyがブロックの戻り値として最後の文の結果を使用していることを示しています。 (反転されていてもそうでなくても)、これは三元がすることです。 –

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

接尾辞ifは、条件が満たされていないときにnilを返すことを意味するため、アプローチが失敗しました。

+1

このコードはなぜ、および/またはこのコードが質問に答えるかについての追加の文脈を提供して、長期的な価値を向上させます。 – Aurril

+0

my ifステートメントの説明をありがとう。このソリューションも同様に機能します。私はタップで読んでいます。 – stuartambient

関連する問題