首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于SortedMap的黄玉类

用于SortedMap的黄玉类
EN

Stack Overflow用户
提问于 2020-03-01 05:04:10
回答 2查看 78关注 0票数 2

我相信scalaz对于Map和SortedMap都有单类实例。

但这不起作用

代码语言:javascript
复制
scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._

scala> Map(1 -> 1) |+| Map(1 -> 1)
res0: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)

scala> import scala.collection.SortedMap
import scala.collection.SortedMap

scala> SortedMap(1 -> 1) |+| SortedMap(1 -> 1)
<console>:19: error: value |+| is not a member of scala.collection.SortedMap[Int,Int]
       SortedMap(1 -> 1) |+| SortedMap(1 -> 1)
                         ^
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-01 14:36:37

Scalaz只提供不可变的数据结构实例。

您应该添加import scalaz.std.sortedMap._并使用scala.collection.SortedMapscala.collection.immutable.SortedMap instaead。

代码语言:javascript
复制
Welcome to Scala 2.13.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_201).
Type in expressions for evaluation. Or try :help.

scala> scalaz.BuildInfo
res0: scalaz.BuildInfo.type = version: 7.2.30, scalaVersion: 2.13.1

scala> import scalaz.std.sortedMap._
import scalaz.std.sortedMap._

scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._

scala> scala.collection.SortedMap(1 -> 2) |+| scala.collection.SortedMap(1 -> 3)
                                          ^
       error: value |+| is not a member of scala.collection.SortedMap[Int,Int]
       did you mean ++:?

scala> scala.collection.immutable.SortedMap(1 -> 2) |+| scala.collection.immutable.SortedMap(1 -> 3)
res2: scala.collection.immutable.SortedMap[Int,Int] = TreeMap(1 -> 5)
票数 3
EN

Stack Overflow用户

发布于 2020-03-01 08:41:04

如果第二个参数是SortedMap (像scala集合一样),Scalaz将使用SortedMap,但是这是实现细节,您不应该依赖它。

代码语言:javascript
复制
//If you only care about `Map` inteface then treat `SortedMap` as normal `Map`: 
val res = Map(1 -> 1) |+| SortedMap(1 -> 1)
println(res.getClass.getName) // scala.collection.immutable.TreeMap

//If you really need to have access to SortedMap api then you can cast to it:
val res2 = res.asInstanceOf[SortedMap[Int, Int]]

编辑的--这是实现细节,您应该知道这一点!对于这个问题,应该有更好的答案,使用现有的sortedMap实现!

我没时间调查更多..。索里。

关键在于这里,我们使用to实例作为结果的构建器。

代码语言:javascript
复制
//from implementation of |+|
from.foldLeft(to) { case (to, (k, v)) => to + ... }

:不要将这个答案标记为有效答案:它不是。也许您不应该依赖于实现细节。不过,这是有可能的,这个答案可能对某人有帮助。

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

https://stackoverflow.com/questions/60472150

复制
相关文章

相似问题

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