【问题标题】:How to apply Sort function on a Map in scala?如何在scala中的地图上应用排序功能?
【发布时间】:2014-06-26 13:15:48
【问题描述】:

我在 Play Framework 中使用 MVC 架构,其中视图部分是 scala 和 html 的混合。现在,我需要在我的视图中对来自控制器层的地图进行排序。由于 scala 没有记忆,因此很难创建一个排序函数来按时间戳对我的地图进行排序。 任何人都可以请帮助我真的无法解决这个问题,因为我是 scala 的新手。

这是我的第一个问题。任何帮助将不胜感激。

【问题讨论】:

  • 我们需要了解更多才能回答这个问题,但您可能想要像 map.toList.sortBy(_.timestamp) 这样的东西。
  • “scala 没有内存”等等,什么?

标签: java html scala playframework


【解决方案1】:

假设时间戳是地图的(即它是Map[Long,B]):

myMap.toSeq.sortBy(_._1) // yields a Seq[Tuple2[Long,B]]

也就是说,您首先将映射转换为Seq,以便保留元素顺序(映射通常为HashMaps,具有不可预测的顺序),然​​后按第一个元素对该序列进行排序键值元组。

如果时间戳是值,请将_._1 替换为_._2

请注意,如果您将中间 Seq 转换回 Map(例如使用 .toMap),您将再次回到 HashMap 土地,您的排序将消失。

所以,这可能更像你想要的:

scala.collection.immutable.SortedMap(myMap.toSeq: _*) // yields a SortedMap[Long, B]

在这里,我们将myMap 转换为Seq,以便将其传递给SortedMap 的可变参数工厂方法。

【讨论】:

  • Scala集合中还有ListMap,可变的和不可变的,都会保持键的顺序。
  • 当然,但是ListMap 可以保留插入顺序,但我们想要排序。就我个人而言,我对ListMap 没有用处,它的性能特点使其不适用于我关心的大多数用途。
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 2011-06-15
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多