Scala地图共同发生计数

时间:2017-01-16 22:27:11

标签: scala scala-collections

我不断更新mutable.HashMap[String, String]并记录当前用户位置:

{user1 -> location1,
 user2 -> location4,
 user3 -> location4}

我想跟踪用户之间的位置共存 - 即每对用户在同一位置的次数。我想到的格式是mutable.HashMap[(String, String), Int]

{(user1, user2) -> 0,
 (user1, user3) -> 0,
 (user2, user3) -> 1}

每次用户位置图更新时,我都想重新检查哪些用户在一起,并将其共同出现的数量加1。

以下代码返回{location - >的地图数组(用户)},感觉这是一个很好的第一步。

var users_by_location = user_locations.groupBy(_._2).mapValues{s => s.map{ case(user, location) => user}}

> {location1 -> Array(user1), location4 -> Array(user2, user3)}

我使用的是scala 2.11.8。

1 个答案:

答案 0 :(得分:3)

使用keys获取val m = Map("user1" -> "location1", "user2" -> "location2", "user3" -> "location2") val result = m.keySet.subsets(2).map(_.toList).map(i => (i.head, i(1))).map(i => if (m.get(i._1) == m.get(i._2)) (i, 1) else (i, 0)).toMap println(result) > Map((user1,user2) -> 0, (user1,user3) -> 0, (user2,user3) -> 1) 的所有组合,并比较是否等于生成新地图,例如:

format()