2016-08-26 2 views
2

값이 Seq[Array[Int]]이고 하나만 Array[Int]으로 끝내고 싶습니다. 나는 foldLeft 작동 것이라고 생각하지만, 의외로 그렇지 않습니다 : 나는이 작업을 수행 할 수 있기 때문에배열의 배열을 스칼라로 병합하는 방법

scala> val arr1 = Array(1,2,3) 
arr1: Array[Int] = Array(1, 2, 3) 

scala> val arr2 = Array(4,5,6) 
arr2: Array[Int] = Array(4, 5, 6) 

scala> val seq = Seq(arr1, arr1) 
seq: Seq[Array[Int]] = List(Array(1, 2, 3), Array(1, 2, 3)) 

scala> seq.foldLeft (Array.empty)((x,y) => x ++ y) 
<console>:17: error: value ++ is not a member of Array[Nothing] 
     seq.foldLeft (Array.empty)((x,y) => x ++ y) 
               ^

은 그 오류가 있지만 전체 진실처럼 보이지 않는다 :

scala> Array.empty 
res22: Array[Nothing] = Array() 

scala> Array.empty ++ arr1 ++ arr2 
res23: Array[Int] = Array(1, 2, 3, 4, 5, 6) 

무엇을 주는가?

답변

7

seq.flatten.toArray? 당신이 [Int]이 컴파일러는 Array.empty에 대한 유일한 가능한 유형으로 Nothing을 선택 놓친 Array.empty[Int] : 당신은 컴파일러 유형을 말해야한다 foldLeft 솔루션을

.

+0

설명해 주셔서 감사합니다. 나는 여전히 스칼라의 형식 유추에 익숙해 져있다. 하지만 당신 말이 맞아요. 'seq.flatten.toArray'가 더 좋았습니다. – doub1ejack

관련 문제