首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala: Map.flatten的用例?

Scala: Map.flatten的用例?
EN

Stack Overflow用户
提问于 2015-04-11 13:16:52
回答 1查看 1.2K关注 0票数 6

documentation on Map.flatten声明如下:

将此可遍历集合映射转换为由这些可遍历集合的元素组成的映射。

我得到了“可穿越的收藏地图”例如,这将是一张列表地图。仅凭这个定义,Map[Int, List[Int]]就有资格了。

但是,“由这些可遍历集合的元素组成的地图”是什么呢?听起来很简单,但我很难让它开始工作。

文档中提供的示例代码是..。嗯..。我们可以说,不适用吗?

val xs = List( Set(1,2,3),Set(1,2,3 ) .flatten // xs == List(1,2,3,1,2,3) val ys = Set(列表(1,2,3),List(3,2,1) ).flatten // ys ==集(1,2,3)

我尝试过几种不同的方法,但它们产生了同样的错误。以下是几个例子:

代码语言:javascript
复制
scala> val m = Map(List(1) -> List(1,2,3), List(2) -> List(4,5,6), List(3) -> List(7,8,9))
m: scala.collection.immutable.Map[List[Int],List[Int]] = Map(List(1) -> List(1, 2, 3), List(2) -> List(4, 5, 6), List(3) -> List(7, 8, 9))

scala> m.flatten
<console>:9: error: No implicit view available from (List[Int], List[Int]) => scala.collection.GenTraversableOnce[B].
              m.flatten
                ^

scala> val m = Map(1 -> List(1,2,3), 2 -> List(4,5,6), 4 -> List(7,8,9))
m: scala.collection.immutable.Map[Int,List[Int]] = Map(1 -> List(1, 2, 3), 2 -> List(4, 5, 6), 4 -> List(7, 8, 9))

scala> m.flatten
<console>:9: error: No implicit view available from (Int, List[Int]) => scala.collection.GenTraversableOnce[B].
              m.flatten
                ^

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-11 14:08:28

问题是编译器并不“知道”如何解释存储在映射中的元素。也就是说,解释并不明显,所以你必须提供你自己隐含的元素视图为一个可遍历的。例如,对于您提供的情况,您希望将(Int, List[Int])类型映射的每个元素解释为一个新的元组列表,其中第一个元素是原始元素键,而值是最初在给定键值中的每个值。代码:

代码语言:javascript
复制
implicit val flattener = (t: (Int,List[Int])) ⇒ t._2.map(x ⇒ (t._1, x))

val m = Map(1 → List(1, 2, 3), 2 → List(4, 5), 3 → List(6))
val fm = m.flatten

但你必须自己提供“扁平化”功能。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29578300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档