Tôi muốn sắp xếp một mảng của các bộ bởi thứ 3 và phần tử đầu tiên vì vậy tôi sử dụng đoạn mã sau:Sử dụng lệnh để sắp xếp mảng của mảng, tăng dần và giảm dần
import scala.util.Sorting
val pairs = Array(("a", 5, 2), ("c", 3, 1), ("b", 1, 3))
// sort by the 3rd element, then 1st
Sorting.quickSort(pairs)(Ordering[(Int, String)].on(x => (x._3, x._1)))
Câu hỏi của tôi là, trong ví dụ trước tôi có thể sắp xếp theo cả phần tử thứ ba và thứ nhất tăng dần hoặc cả hai phần tử giảm dần (sử dụng ngược lại). nhưng cách sắp xếp theo phần tử thứ ba tăng dần và phần tử thứ nhất giảm dần.
Xin vui lòng, trong câu trả lời của bạn xem xét các trường hợp sau đây:
Array[Array[People]]
nơi trong trường hợp này tôi không biết kích thước chính xác của các mảng nội (phụ thuộc vào giản đồ tập tin mà tôi đọc vào mảng này) và Tôi muốn sắp xếp theo tất cả các mục trong một bên (một số tăng dần và một số giảm dần).
Chỉnh sửa: Có vẻ như, tôi đã bỏ lỡ hiểu.
Đây là trường hợp đầy đủ của tôi: Tôi có các lớp sau:
sealed trait GValue extends Serializable with Ordered[GValue]{
def compare(o: GValue): Int = {
o match {
case GDouble(v) => this.asInstanceOf[GDouble].v compare v
case GString(v) => this.asInstanceOf[GString].v compare v
}
}
case class GDouble(v: Double) extends GValue
case class GString(v: String) extends GValue
và tôi muốn làm một mã như thế này.
// (startInterval, StopInterval, ArrayOfColumns)
val intervals: Array[(Long,Long,Array[GValue])] =
Array((10,20,Array(GDouble(10.2), GString("alarm"), GString("error"),GDouble("100.234"))),
(30,2000,Array(GDouble(-10.2), GString("alarm"), GString("warn"),GDouble("0.234"))))
Giản đồ hoặc mảng bên trong sẽ thay đổi dựa trên tệp đầu vào (trong ví dụ là Double, String, String, Double nhưng có thể là Double, Double hoặc cái gì khác). Tôi muốn tìm một cách để sắp xếp với bao gồm tất cả các trường hợp của mảng bên trong (liên quan đến loại và độ dài), tăng dần và giảm dần.
những gì tôi làm hiện tại là thay đổi mảng bên trong thành Iterable và sau đó sử dụng Ordering [Iterable [GValue]] để sắp xếp hoặc Sắp xếp [Iterable [GValue]]. Nhưng tôi muốn sắp xếp theo các hướng tách ra (tăng dần cho cột đầu tiên và sau đó giảm dần cho phần thứ hai sau đó tăng dần đến thứ ba và vân vân)
Bạn muốn sắp xếp các 'mảng intervals' dựa trên một số yếu tố của 'Array [GValue]'? –
@Peter Neyens, Có, Bạn hoàn toàn đúng :) – Abdulrahman