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

Chr*_*ris 18 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)
Run Code Online (Sandbox Code Playgroud)

然后

  println(result.mkString)
Run Code Online (Sandbox Code Playgroud)

Des*_*tin 33

实际上,您可以使用普通的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)
Run Code Online (Sandbox Code Playgroud)


Lui*_*hys 11

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

List((1.2, "a1"), (0.1, "a2"), (0.9, "a3")).sorted
// List((0.1,a2), (0.9,a3), (1.2,a1))
Run Code Online (Sandbox Code Playgroud)

  • 关于元组的好处是它将首先按第一部分排序,并且后续部分将打破关系! (2认同)