我有一个数组数组,我想定义一个产生每个元素的函数。像这样:
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可以吗?
答案 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)