排序对象列表的最简单方法

时间:2012-03-17 15:58:04

标签: scala

我有A类型的对象列表。在第一次迭代中,我为每个对象分配一个双重值0< x< 1然后想根据它的x值对每个对象进行排序。

目前我使用一个包装类来存储对象及其x值以生成可比较的列表。

Scala提供的数据类型是否允许我这样的内容:

 var result = new SortedList[Double, A]
 result.insert(x,a)
 result.insert(x1,a1)
 result.insert(x2,a2)

然后

  println(result.mkString)

3 个答案:

答案 0 :(得分:32)

使用普通的Scala列表及其sortBy方法,您可以非常轻松地执行此操作。这是一个简短的REPL会议,展示了如何:

scala> class A(val value: Double) { override def toString = "A:" + value }
defined class A

scala> List(new A(6), new A(1), new A(3)) sortBy (_.value)
res0: List[A] = List(A:1.0, A:3.0, A:6.0)

答案 1 :(得分:11)

使用元组而不是创建新的包装类。

List((1.2, "a1"), (0.1, "a2"), (0.9, "a3")).sorted
// List((0.1,a2), (0.9,a3), (1.2,a1))

答案 2 :(得分:3)

我是这样的。要获取散列图中的前c个单词:

  def getTopCWordsDeclarative(input: mutable.HashMap[String, Int], c: Int): Map[String, Int] = {
    val sortedInput = input.toList.sortWith(_._2 > _._2)
    sortedInput.take(c).toMap
  }