首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带SortedMap和“反向”SortedMap的Scala类

带SortedMap和“反向”SortedMap的Scala类
EN

Stack Overflow用户
提问于 2015-04-22 13:01:26
回答 2查看 1.3K关注 0票数 2

我是斯卡拉的新手。我希望在Scala中创建一个类,它有两个可变的SortedMap,一个按正常排序顺序(递增),一个按反向排序(递减)。

代码语言:javascript
复制
class MyClass {
  var mapNormal : SortedMap[Int, Int] = SortedMap.empty
  var mapReversed : ??? = SortedMap.empty
}

var x  = new MyClass
x.mapNormal += (1 -> 50)
x.mapReversed += (2 -> 51)

我怎样才能在Scala中做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-22 13:09:52

如果您查看SortedMap,您会发现SortedMap.empty[A]采用隐式Ordering[A]。这意味着,您可以像调用方法那样调用该方法,并具有自动解析的隐式(对于Int的默认排序,这正是您所认为的那样),或者您可以提供一个显式排序:

代码语言:javascript
复制
class MyClass {
  var mapNormal : SortedMap[Int, Int] = SortedMap.empty
  var mapReversed : SortedMap[Int, Int] = SortedMap.empty(mapNormal.ordering.reverse)
}

Int的隐式排序是在scala.math.Ordering的配套对象以及其他默认订单中定义的,以防您有疑问。

票数 4
EN

Stack Overflow用户

发布于 2015-04-22 13:10:04

不幸的是,scala没有可变的排序映射(例如TreeMap),所以您只能使用不可变的版本。

如果在第二个映射中需要反向排序,则需要提供反向排序参数。

代码语言:javascript
复制
  // Key ordering
  implicit val Ord = implicitly[Ordering[Int]]

  val map = SortedMap.empty[Int, Int]
  val reversedMap = SortedMap.empty[Int, Int](Ord.reverse)

  println(map + (1 -> 50, 2 -> 51))
  println(reversedMap + (1 -> 50, 2 -> 51))

输出:

代码语言:javascript
复制
Map(1 -> 50, 2 -> 51)
Map(2 -> 51, 1 -> 50)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29798401

复制
相关文章

相似问题

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