将2D列表旋转90度,或者选择一种方法来获取2D列表中的特定列

时间:2012-12-23 03:52:08

标签: scala scala-collections

我有一个像这样的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))

2 个答案:

答案 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评论