如何在Scala中对Vector对象进行排序?

时间:2015-06-10 16:15:54

标签: scala sorting apache-spark

我有一个特定类的对象矢量。我怎么能对它们进行排序?我必须在类中添加哪种比较方法才能使其可排序?如果不是方法,我应该实现哪个排序功能?

1 个答案:

答案 0 :(得分:2)

sorted的方法Vector采用类型math.Ordering[B]的隐式参数,用于排序。有几种方法可以提供它:

  1. 定义隐式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允许提供在类上定义的几种不同的排序,并明确导入或提供所需的顺序。

  2. 通过覆盖compare方法让您的课程延长Ordered[MyClass]。在这种情况下,将隐式创建必要的Ordering

    case class MyClass(field: Int) extends Ordered[MyClass] {
      def compare(other: MyClass): Int = this.field compareTo other.field
    }
    

    这也会将方法<><=>=添加到班级。

  3. 使用sortBy的{​​{1}}或sortWith方法,这些方法可以使用函数,但不需要Vector参数。

    Ordering