Scalaでは、Seqに対しfoldLeftやfoldRightを使用することで畳み込みが行えます。
畳み込みとは、順次計算をしていく事です。
foldLeft、 folrRghitのサンプル
def main(args: Array[String]) : Unit = { val seq = Seq("Apple", "Bread", "Cake") // foldLeft - 正順に畳み込み println(seq.foldLeft(0)((a, e) => a + e.length)) // 14 // foldRight - 逆順に畳み込み println(seq.foldRight(0)((e, a) => a + e.length)) // 14 // 略式 println(seq.foldLeft(0)(_ + _.length)) // 14 println(seq.foldRight(0)(_.length + _)) // 14 }
似たような処理として、reduceLeft、reduceRightがあります。
これは、初期値を取りません。
ただし、Seqの要素と戻り値の型が同じでないといけません。
reduceLeft、reduceRightのサンプル
def main(args: Array[String]) : Unit = { val seq = Seq("Apple", "Bread", "Cake") // reduceLeft - 正順に畳み込み println(seq.reduceLeft((a, e) => a + ", " + e)) // Apple, Bread, Cake // reduceRight - 逆順に畳み込み println(seq.reduceRight((a, e) => a + ", " + e)) // Apple, Bread, Cake // 略式 println(seq.reduceLeft(_ + ", " + _)) // Apple, Bread, Cake println(seq.reduceRight(_ + ", " + _)) // Apple, Bread, Cake }