scala中嵌套循环的产生

时间:2015-12-06 23:52:52

标签: scala

我有一个数组数组,我想定义一个产生每个元素的函数。像这样:

def foo(l:MyList) = {
    for (e1 <- l.sub_list) {
        for(e2 <- e1.sub_list) {
            yield e2
        }
    }
}

def bar(l:MyList) = {
  foo(l).map(a => {
    //.. body
  })
}

scala可以吗?

2 个答案:

答案 0 :(得分:2)

我现在假设l.sub_list将返回嵌套在l内的数组。 MyList看起来像是:

type MyList[A] = Array[Array[A]]

foo可以定义为:

def foo[A](l: MyList[A]) = for {
  l1 <- l
  e <- l1
} yield e

这是预期的结果吗?

scala> foo(Array(Array(1,2,3), Array(4,5,6), Array(7,8,9)))
Array(1, 2, 3, 4, 5, 6, 7, 8, 9)

编辑:在问题

中添加了bar

bar

的一种可能实现方式
def bar(l: MyList[Int]) = foo(l).map(_ * 10)

预期结果:

scala> bar(Array(Array(1,2,3), Array(4,5,6), Array(7,8,9)))
Array(10, 20, 30, 40, 50, 60, 70, 80, 90)

答案 1 :(得分:1)

您可以使用List.flatten代替 yield

例如: val l = List(List(1, 2), List(3), List(4,5)) val f = l.flatten // f: List[Int] = List(1,2,3,4,5)