2017-01-16 3 views
0

내가 가진 세는 현재 사용자 위치의 기록으로 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 -> Array (사용자)}의지도를 반환하며, 첫 번째 단계가 좋은 느낌입니다.

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

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

저는 스칼라 2.11.8을 사용하고 있습니다.

답변

3

사용은 subsets(2)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)