带有地图和展平的scala并行数组

阿米尔·阿富汗尼(Amir Afghani)

下面,在我的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按顺序进行。

但是,您可以将mapflatten组合在一起并使用flatMap

override def calculateLegalMoves(board: Board) : Array[Move] = 
  candidateMoveCoordinates.par.flatMap { candidate =>
    checkLegalMove(candidate, board)
  }.toArray

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章