Search code examples
scalafor-loopfor-comprehension

Counter in for comprehension


How to do Scala equivalent to this Java code:

int i = 0;
for(String x: xs) {
    for(String y : ys) {
        foo(x, y, i);
        i+=10;
    }
}

Solution

  • There are multiple ways of doing it:

    var i = 0                                 
    for(x <- xs;y <- ys) {
      foo(x,y,i)
      i = (i+10)
    }
    

    To do it functionally without using external i:

    xs.foldLeft(0){(a:Int,b) =>
       ys.foldLeft(a){(c:Int, p) =>
         foo(b,p,a)
         c+10
       }
    }