2012-03-31 14 views
3

はい、楽しい質問ですが、mapのようなコレクション操作を使い、正しく縮小して折り畳むことを学びたいと思います。n個の空白を生成するライナーを改善する

私はこれをしなかった:

コレクション操作でn個のスペースを生成するより良い、慣用的な方法は何ですか
scala> Range(0,3) map(_=>" ") reduceLeft(_+_) 
res15: java.lang.String = " " 

答えて

15

技術的には別の、おそらくより読みやすいアプローチです:ここで何が起こっている

scala> " " * 3 
res1: String = " " 

は、ということです" "は、scala.Predef.augmentStringによってStringOpsのインスタンスに暗黙的に変換され、StringOps*メソッドが呼び出されます。


更新:これは明らかに-itがmapまたはreduceなどの高次機能はありませんあなたが「コレクション操作」によるものではないので、私は、一部は冗談のようなものとして、これを意味しました。私は間違いなく実際のコードで私のバージョン(StringOpsバージョン)を使用したいと思いますが、(教育上の理由から、同様の問題などで)高次関数を使用したい場合、あなたのバージョンはかなり慣用的です。私は個人的に範囲を構築するのにuntilを使用し、reduceLeftの代わりにreduce(連結が連想しているので)-i.e。、virtualeyesが答えに書いたものをほとんど使用します。

+1

素晴らしいものは、Scalaはルビーをしたとは思いませんでした/ Groovy実際にはそうです;-) – virtualeyes

2
1 until 10 map (_=> " ") reduce(_+_) 

StringOpsscala.collection.immutableパッケージ内にあるので、以下では、私が推測する、「コレクション・オペレーション」である

1

私はfoldLeftがより適切だと思う:トラヴィス・ソリューションとして

Range(0,3).foldLeft("")((str, i) => str + " ") 
4

としてエレガントされないが、今のところ二最もエレガントな方法私見:

List.fill (3)(' ').mkString 
関連する問題