我有一个特定类的对象矢量。我怎么能对它们进行排序?我必须在类中添加哪种比较方法才能使其可排序?如果不是方法,我应该实现哪个排序功能?
答案 0 :(得分:2)
sorted
的方法Vector
采用类型math.Ordering[B]
的隐式参数,用于排序。有几种方法可以提供它:
定义隐式math.Ordering[MyClass]
。您可以使用Ordering
随播广告对象中的方法为您的班级创建Ordering
:
case class MyClass(field: Int)
object MyClass {
implicit val MyClassOrdering: Ordering[MyClass] = Ordering.by(_.field)
}
如果在Ordering
的配套对象中定义了MyClass
,则会自动提供排序。{p>否则,在调用sorted
之前,您必须手动导入它。 Ordering
允许提供在类上定义的几种不同的排序,并明确导入或提供所需的顺序。
通过覆盖compare
方法让您的课程延长Ordered[MyClass]
。在这种情况下,将隐式创建必要的Ordering
。
case class MyClass(field: Int) extends Ordered[MyClass] {
def compare(other: MyClass): Int = this.field compareTo other.field
}
这也会将方法<
,>
,<=
,>=
添加到班级。
使用sortBy
的{{1}}或sortWith
方法,这些方法可以使用函数,但不需要Vector
参数。
Ordering