2015-12-06 2 views
0

У меня есть массив массивов, и я бы хотел определить функцию, которая дает каждый элемент. Что-то вроде этого:Выход из вложенных циклов в 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

Я вам код, откуда взялся '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) 

EDIT: добавлена ​​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)

Смежные вопросы