我有一个2D列表,像这样:
type Board = List[List[Option[Move]]]
看起来有点像这样:
None None Some(X)
None None None
None None None
我可以做的事情行使用通常的收集方法,映射,折叠等。但是我想用类似的方式来处理这些列。我已经尝试了大约1小时没有运气(头脑空白)的方法,像这样:
def getColumn(board: Board, column: Int): List[Option[Move]]
给定上面的数组,调用getColumn(board, 2)
,我应该收到List(None, None, Some(X))
我相信你正在寻找的是list .转置。这实际上将旋转列表,以便所有列都将分组在一起。所以你的方法可以是:
def getColumn(board: Board, column: Int): List[Option[Move]] = board.transpose.apply(column)
Ryan的答案是正确的,也是首选。我试验了几分钟,没有意识到"转置"的存在。下面是我的非内置方法:
def getColumn(board: Board, column: Int): List[Option[Move]] =
for { r <- board } yield r(column)
2012/12/23 -更新以反映@dhg评论