Question about sum of Map[String, Map[String, Int]]

63 views
Skip to first unread message

Liren Sun

unread,
Oct 17, 2014, 2:20:49 AM10/17/14
to alge...@googlegroups.com
Hi, 
I have a problem when I try to sum Map[String, Map[String, Int]].
When the first operant is a key point to a empty map, it was not being calculate into the result.
 

scala> val d1 = Map("a"->Map[String, Int]())
d1: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Int]] = Map(a -> Map())

scala> val d2 = Map("b"->Map[String,Int]())
d2: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Int]] = Map(b -> Map())

scala> val d3=d1+d2
d3: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Int]] = Map(b -> Map())

// I was expecting Map[String,Int]] = Map(a->Map(), b -> Map())


scala> val d1 = Map("a"->Map[String, Int]("a"->1))
d1: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Int]] = Map(a -> Map(a -> 1))

scala> val d3=d1+d2
d3: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Int]] = Map(b -> Map(), a -> Map(a -> 1))

// Same as what I expected

scala> val d1 = Map("a"->Map[String, Int]())
d1: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Int]] = Map(a -> Map())

scala> val d2 = Map("b"->Map[String,Int]("a"->1))
d2: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Int]] = Map(b -> Map(a -> 1))

scala> val d3=d1+d2
d3: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Int]] = Map(b -> Map(a -> 1))

// I was expecting Map(a->Map(), b->Map(a->1))

Thanks

Message has been deleted

Liren Sun

unread,
Oct 17, 2014, 2:44:37 AM10/17/14
to alge...@googlegroups.com
scala> val y = implicitly[Monoid[Map[String, Map[String, Int]]]]
y: com.twitter.algebird.Monoid[Map[String,Map[String,Int]]] = com.twitter.algebird.MapMonoid@50bfd130

scala> y.isNonZero(d1)
res12: Boolean = false

scala> d1
res13: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Int]] = Map(a -> Map())

Reply all
Reply to author
Forward
0 new messages