scala – 展平集合的地图
发布时间:2020-12-16 09:50:34 所属栏目:安全 来源:网络整理
导读:我试图压扁一个地图,其中的键是可穿越的,在这个意义上: Map( Set(1,2,3) - 'A',Set(4,5,6) - 'B') 应该扁平化为: Map(5 - B,1 - A,6 - B,2 - A,3 - A,4 - B) 这是我做的: def fuse[A,B,T : Traversable[A]](mapOfTravs: Map[T,B]): Map[A,B] = { val pair
我试图压扁一个地图,其中的键是可穿越的,在这个意义上:
Map( Set(1,2,3) -> 'A',Set(4,5,6) -> 'B') 应该扁平化为: Map(5 -> B,1 -> A,6 -> B,2 -> A,3 -> A,4 -> B) 这是我做的: def fuse[A,B,T <: Traversable[A]](mapOfTravs: Map[T,B]): Map[A,B] = { val pairs = for { trav <- mapOfTravs.keys key <- trav } yield (key,mapOfTravs(trav)) pairs.toMap } 有用.但: >有更简单的方法吗? val map2 = Map( Set(1,6) -> 'B') val fused2 = fuse[Int,Char,Set[Int]](map2) val map1: Map[Traversable[Int],Char] = Map( Set(1,6) -> 'B') val fused1 = fuse[Int,Traversable[Int]](map1) P.S.:当关键遍历具有非空交点时,该保险丝功能没有多大意义. 解决方法
就像@Azzie一样,我在想拉链,但也许Azzie有这些优点.
scala> val m = Map( Set(1,6) -> 'B') m: scala.collection.immutable.Map[scala.collection.immutable.Set[Int],Char] = Map(Set(1,3) -> A,6) -> B) scala> (m map { case (k,v) => k zip (Stream continually v) }).flatten.toMap res0: scala.collection.immutable.Map[Int,Char] = Map(5 -> B,4 -> B) scala> (m map { case (k,v) => k zipAll (Nil,null,v) }).flatten.toMap res1: scala.collection.immutable.Map[Any,4 -> B) scala> m flatMap { case (k,v) => k zip (Stream continually v) } res2: scala.collection.immutable.Map[Int,4 -> B) 如何很好地概括它并不明显. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |