Ich mag würde eine Reihe von Tupeln durch dritte und erste Element sortieren, damit ich den folgenden Code verwendet:Verwendung von Bestellung Array von Arrays zu sortieren, aufsteigend und absteigend
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)))
Meine Frage ist, dass in der vorheriges Beispiel Ich kann sowohl nach dem dritten als auch nach dem ersten aufsteigenden Element oder nach beiden absteigenden Elementen sortieren (umgekehrt). aber wie man nach dem dritten Element aufsteigend und nach dem ersten Element absteigend sortiert.
bitte in Ihrer Antwort den folgenden Fall betrachten:
Array[Array[People]]
wo ich in diesem Fall nicht die genaue Größe des inneren Array weiß (abhängig von dem Dateischema, das ich in diesen Array lesen) und Ich möchte nach allen Elementen in der Seite sortieren (einige aufsteigend und einige absteigend).
Edit: Es sieht aus, ich habe Miss verstanden.
Hier ist mein voller Fall: ich die folgenden Klassen:
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
und ich mag, wie diese einen Code zu tun.
// (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"))))
Das Schema oder die innere Anordnung würde auf der Eingabedatei basierend ändern (im Beispiel ist es Double, String, String, Double, aber es könnte Double, Double oder etwas anderes sein). Ich würde gerne einen Weg finden, ohne alle Fälle der inneren Anordnung (in Bezug auf Typ und Länge), aufsteigend und absteigend zu sortieren.
was ich derzeit mache, ist das innere Array in Iterable zu ändern und dann Ordering [Iterable [GValue]] zum Sortieren oder Bestellen [Iterable [GValue]] zu verwenden. Aber ich möchte in getrennten Richtungen sortieren (für die erste Spalte aufsteigend und dann absteigend für die zweite dann in den dritten aufsteigend und so weiter)
Sie wollen die 'Einsatz der Array sortieren, basierend auf einige der Elemente des' Array [Gwert] '? –
@Peter Neyens, Ja, Sie haben völlig Recht :) – Abdulrahman