我有一个像这样的2D列表:
type Board = List[List[Option[Move]]]
看起来有点像这样:
None None Some(X)
None None None
None None None
我可以使用通常的收集方法,地图,折叠等来排序。但我希望能够以类似的方式对列进行操作。对于像这样的方法,我一直在尝试大约1小时而没有运气(mindblank):
def getColumn(board: Board, column: Int): List[Option[Move]]
鉴于上述数组,调用getColumn(board, 2)
,我应该收到List(None, None, Some(X))
答案 0 :(得分:4)
我相信你正在寻找的是List.transpose。这将基本上旋转列表,以便将所有列组合在一起。所以你的方法可能是:
def getColumn(board: Board, column: Int): List[Option[Move]] = board.transpose.apply(column)
答案 1 :(得分:2)
Ryan的回答是正确的,也是首选。我没有意识到存在“转置”,我试验了几分钟。这是我的非内置方法:
def getColumn(board: Board, column: Int): List[Option[Move]] =
for { r <- board } yield r(column)
2012/12/23 - 更新以反映@dhg评论