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



我有一个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评论

相关内容

  • 没有找到相关文章