Menu
Coddy logo textTech

Nach einem Schlüssel sortieren

Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 38 von 64.

order(x) gibt die Positionen zurück, die x sortieren würden: zuerst die Position des kleinsten Werts, dann die des nächsten und so weiter. Indiziere einen anderen Vektor damit, um diesen Vektor nach x zu sortieren:

names <- c("cy", "ada", "bo")
ages <- c(41, 36, 22)
print(order(ages))
print(names[order(ages)])

Ausgabe:

[1] 3 2 1
[1] "bo"  "ada" "cy" 

Für die absteigende Reihenfolge übergib decreasing = TRUE oder setze ein Minuszeichen vor einen numerischen Schlüssel:

names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(scores, decreasing = TRUE)])
print(names[order(-scores)])

Ausgabe:

[1] "ada" "cy"  "bo" 
[1] "ada" "cy"  "bo" 

Gib order() einen zweiten Schlüssel, um Gleichstände aufzulösen. Hier werden die Punktzahlen von hoch nach niedrig sortiert und gleiche Punktzahlen nach Namen sortiert:

names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(-scores, names)])

Ausgabe:

[1] "ada" "bo"  "cy" 

order() behält gebundene Werte in ihrer ursprünglichen Reihenfolge bei, wenn kein zweiter Schlüssel angegeben wird. Mit denselben Positionen können mehrere zusammengehörige Vektoren neu angeordnet werden:

items <- c("tea", "jam", "oil")
price <- c(4, 2.5, 4)
qty <- c(1, 6, 3)
idx <- order(price)
print(items[idx])
print(qty[idx])

Ausgabe:

[1] "jam" "tea" "oil"
[1] 6 1 3
challenge icon

Aufgabe

Einfach

Vervollständige ranking(names, scores). Gib eine Zeile pro Spieler zurück, 1. ada 95, vom höchsten zum niedrigsten Punktestand. Spieler mit demselben Punktestand werden alphabetisch aufgelistet.

Der bereitgestellte Code liest die Spieler als durch Kommas getrennte name:score-Paare ein und gibt jede zurückgegebene Zeile aus.

Probier es selbst

ranking <- function(names, scores) {
  # Schreibe deinen Code hier
  character(0)
}

# Mitgelieferter Ein-/Ausgabecode: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
pairs <- strsplit(strsplit(input[1], ",")[[1]], ":")
names <- sapply(pairs, function(p) p[1])
values <- as.numeric(sapply(pairs, function(p) p[2]))
cat(ranking(names, values), sep = "\n")
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik und Ablaufsteuerung

Übe selbstständig: Online-R-Compiler