0

我有一个游戏板,它被建模为 Map[Location,Player]。对于某些计算,我想将其转换为 Map[Player,Set[Location]]。例如,如果我们简化并使用符号来表示键和值,我想将其转换为:

Map('a -> 'X, 'b -> 'O, 'c -> 'X, 'd -> 'O)

进入这个:

Map('O -> Set('b, 'd), 'X -> Set('a, 'c))

(我在写这个问题时想出了一个解决方案,贴在下面。希望对此发表评论。也许还有其他更好的方法?)

4

3 回答 3

2

分组后,您可以使用mapValues

m.groupBy(_._2).mapValues(_.keySet)
于 2013-04-02T20:51:50.963 回答
1

回答自己,因为我在写问题时想出了一个相当优雅的解决方案:

grid.groupBy(_._2).map(x => x._1 -> x._2.keySet)

有兴趣听听是否有更好的方法。

于 2013-04-02T20:27:59.583 回答
-1
m.foldLeft(Map.empty[Symbol, Set[Symbol]].withDefaultValue(Set.empty)) { case (acc, (k, v)) => acc.updated(v, acc(v) + k) }
于 2013-04-02T20:42:49.330 回答