2016-04-29 29 views
0

我想在scala中做些什麼。斯卡拉:toArray方法和地圖方法

scala> val x = Array(Array(8.524, 6.375, 17.043), Array(1.754, 3.509, -1.754), Array(12.69, -12.69, 25.38),Array(4.355, 3.687, 2.876)) 
x: Array[Array[Double]] = Array(Array(8.524, 6.375, 17.043), Array(1.754, 3.509, -1.754), Array(12.69, -12.69, 25.38), Array(4.355, 3.687, 2.876)) 

scala> val y = Array(1.0, -1.0, 2.0) 
y: Array[Double] = Array(1.0, -1.0, 2.0) 

我嘗試添加他們像:

Array(Array(8.524 + 1.0, 6.375 + (-1.0), 17.043 + 2),Array(1.754 + 1.0, 3.509 + (-1.0), -1.754 + 2), Array(....)......) 

上面做的事情,我的代碼是

val result = for(i <- 0 until x.length) yield { 
    for(j <- 0 until y.length) yield x(i)(j) + y(j) 
} 

結果是

result: scala.collection.immutable.IndexedSeq[scala.collection.immutable.IndexedSeq[Double]] = Vector(Vector(9.524, 5.375, 19.043), Vector(2.754, 2.509, 0.246), Vector(13.69, -13.69, 27.38), Vector(5.355, 2.687, 4.8759999999999994)) 

我用toArray方法在result,但得到Array[scala.collection.immutable.IndexedSeq[Double]] = Array(Vector(9.524, 5.375, 19.043), Vector(2.754, 2.509, 0.246), Vector(13.69, -13.69, 27.38), Vector(5.355, 2.687, 4.8759999999999994))

但是我希望得到Array(Array[Double]),我該怎麼辦?

此外,我想的result所有元素轉換爲Math.tan

如果val z = Array(1, 100, 200)

我可以用z.map{x => Math.tan(x)}來實現。

如果數組的形式如上所示,我該怎麼做同樣的事情?

感謝您的時間。

+0

理解的結果取決於您傳遞給for的集合的類型。 '0直到x.length'是'Range'(這是一個'IndexedSeq')。基於這個結果將是一個'IndexedSeq'而不是'Array'。 –

+0

這就解釋了它。謝謝 –

回答

0

只需使用:

val z = x.map(arr => (arr zip y).map{case (a, b) => a + b}) 

這會給你Array[Array[Double]]。然後您可以使用:

z.map(_.map(Math.tan)) 

對陣列的每個元素應用Math.tan()方法。

+0

對我很有用 –