3

我有一个像这样的二维列表:

type Board = List[List[Option[Move]]]

看起来有点像这样:

None None Some(X)
None None None
None None None

我可以使用通常的收集方法、map、fold 等来对行进行操作。但我希望能够以类似的方式对列进行操作。对于这样的方法,我已经尝试了大约 1 小时,但没有运气(头脑空白):

def getColumn(board: Board, column: Int): List[Option[Move]]

给定上面的数组,调用getColumn(board, 2),我应该收到List(None, None, Some(X))

4

2 回答 2

4

I believe you're looking for is List.transpose. This will essentially rotate the list such that all of the columns will be grouped together. So your method could be:

def getColumn(board: Board, column: Int): List[Option[Move]] = board.transpose.apply(column)
于 2012-12-23T04:08:42.353 回答
2

Ryan 的回答是正确的,也是首选。我试验了几分钟,却没有意识到“转置”的存在。这是我的非内置方法:

def getColumn(board: Board, column: Int): List[Option[Move]] =
  for { r <- board } yield r(column)

2012/12/23 - 更新以反映@dhg 评论

于 2012-12-23T04:24:25.610 回答