我不断更新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。
答案 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()