下面,在我的calculateLegalMoves
方法中,我想map
针对每个数组元素并行执行调用。我发现为了安抚编译器,我必须转换为并行数组,并在执行计算后转换回普通数组。这样对吗?有没有更优雅的方法可以做到这一点?
class Knight extends Piece {
val candidateMoveCoordinates : Array[Int] = Array(-17, -15, -10, -6, 6, 10, 15, 17)
override def calculateLegalMoves(board: Board) : Array[Move] = {
val possibleMoves : ParArray[Option[Move]] = candidateMoveCoordinates.par.map(candidate => checkLegalMove(candidate, board))
possibleMoves.toArray.flatten
}
private def checkLegalMove(x: Int, board: Board) : Option[Move] = {
//not implemented yet
None
}
}
两次转换没有任何办法。并行集合提供了seq
一种返回顺序集合的方法,但是在这里,它提供了ArraySeq
,这不是我们想要的。collection.breakOut
可用于map
一次拍摄并转换为不同的收藏类型,但是在此处使用时,它将强制map
按顺序进行。
但是,您可以将map
和flatten
组合在一起并使用flatMap
:
override def calculateLegalMoves(board: Board) : Array[Move] =
candidateMoveCoordinates.par.flatMap { candidate =>
checkLegalMove(candidate, board)
}.toArray
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句