我是斯卡拉的新手。我希望在Scala中创建一个类,它有两个可变的SortedMap,一个按正常排序顺序(递增),一个按反向排序(递减)。
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中做到这一点?
发布于 2015-04-22 13:09:52
如果您查看SortedMap,您会发现SortedMap.empty[A]采用隐式Ordering[A]。这意味着,您可以像调用方法那样调用该方法,并具有自动解析的隐式(对于Int的默认排序,这正是您所认为的那样),或者您可以提供一个显式排序:
class MyClass {
var mapNormal : SortedMap[Int, Int] = SortedMap.empty
var mapReversed : SortedMap[Int, Int] = SortedMap.empty(mapNormal.ordering.reverse)
}Int的隐式排序是在scala.math.Ordering的配套对象以及其他默认订单中定义的,以防您有疑问。
发布于 2015-04-22 13:10:04
不幸的是,scala没有可变的排序映射(例如TreeMap),所以您只能使用不可变的版本。
如果在第二个映射中需要反向排序,则需要提供反向排序参数。
// 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))输出:
Map(1 -> 50, 2 -> 51)
Map(2 -> 51, 1 -> 50)https://stackoverflow.com/questions/29798401
复制相似问题