我有一个游戏板,它被建模为Map [Location,Player]。对于 一些计算我想把它转换成 地图[播放器,设置[位置]。例如,如果我们简化和使用符号 关键和值,我想改变这个:
Map('a -> 'X, 'b -> 'O, 'c -> 'X, 'd -> 'O)
进入这个:
Map('O -> Set('b, 'd), 'X -> Set('a, 'c))
(我在写下这个问题时提出了一个解决方案,发布在下面。希望对此有所评论。也许还有其他更好的方法吗?)
答案 0 :(得分:2)
分组后,您可以使用mapValues
:
m.groupBy(_._2).mapValues(_.keySet)
答案 1 :(得分:1)
回答自己,因为我在写这个问题时提出了一个相当优雅的解决方案:
grid.groupBy(_._2).map(x => x._1 -> x._2.keySet)
有兴趣听听是否有更好的方法。
答案 2 :(得分:-1)
m.foldLeft(Map.empty[Symbol, Set[Symbol]].withDefaultValue(Set.empty)) { case (acc, (k, v)) => acc.updated(v, acc(v) + k) }