2016-05-17 67 views
1

我對scala和函數式編程通常都很陌生,所以這可能是一些愚蠢的問題。無論如何,我試圖在網上搜索,閱讀一些教程和ScalaByExample書,但我沒有找到/達到我可以回答我的問題的部分。斯卡拉新手關於泛化參數數據類型的查詢

這裏是我的問題:

我有幾個功能有以下形式:

def func1(A: Array[Array[DataType]], B: Array[Array[DataType]], 
    fn: (DataType, DataType) => PotentiallyDifferentDataType): Array[Array[DataType]] = { 
    // Do something in each element using fn 
} 

def func2(A: Array[DataType], B: Array[DataType], 
    fn: (DataType, DataType) => PotentiallyDifferentDataType) = { 
    // Do something for each element using fn 
} 

我想要做的就是創建一個接受一維或二維陣列的功能和執行逐元素的操作那些陣列的元素可能是boolean,int,floatdouble

+0

的[圖](http://www.brunton-spall.co.uk/post/2011/12/02/map-map-and-flatmap-in-scala /)函數是你想要的。你應該考慮使用['List's而不是'Array's](http:// stackoverflow。 COM /問題/ 2712877 /差陣列和一覽中-階間) – TeWu

回答

0

如果知道A和B(以及它們的部件陣列)具有相同的長度:

def func1[T, U](A: Array[Array[T]], B: Array[Array[T]], fn: (T, T) => U): 
    Array[Array[U]] = 
    A.zip(B) map { case (a, b) => func2(a, b, fn) } 

def func2[T, U](A: Array[T], B: Array[T], fn: (T, T) => U): Array[U] = 
    A.zip(B) map { case (a, b) => fn(a, b) }