BBH
-Biz Branding Hub-
投稿日 : 
2020/10/19
更新日 : 
2020/10/19

【Scala】foldLeft、foldRightを使ってSeqを畳み込みする

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
}

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend