2015-12-06 87 views
0

我有一個數組數組,我想定義一個函數,產生每一個單一的元素。類似這樣的:從斯卡拉嵌套循環產量

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

我是你的代碼,'l1'從哪裏來的?例如什麼進入功能和什麼出去會很好。 – pedrofurla

+0

是的,你是對的。我修好了它。 – badnack

+1

@badnack可以請您包括'MyList'的定義和輸入的例子以及預期的結果嗎? –

回答

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

而不是產量,您可以使用List.flatten

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