Menu
Coddy logo textTech

Trier selon une clé

Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 38 sur 64.

order(x) renvoie les positions qui permettraient de trier x : d’abord la position de la plus petite valeur, puis la suivante, et ainsi de suite. Indexez un autre vecteur avec ce résultat pour trier ce vecteur selon x :

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

Résultat :

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

Pour l’ordre décroissant, transmettez decreasing = TRUE ou placez un signe moins devant une clé numérique :

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

Résultat :

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

Donnez à order() une deuxième clé pour départager les égalités. Ici, les scores sont triés du plus élevé au plus bas et les scores égaux sont triés par nom :

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

Résultat :

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

order() conserve les valeurs ex æquo dans leur ordre d’origine lorsqu’aucune deuxième clé n’est fournie. Les mêmes positions peuvent réordonner plusieurs vecteurs qui vont ensemble :

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])

Résultat :

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

Défi

Facile

Complétez ranking(names, scores). Retournez une ligne par joueur, 1. ada 95, du score le plus élevé au plus faible. Les joueurs ayant le même score sont listés par ordre alphabétique.

Le code fourni lit les joueurs sous forme de paires name:score séparées par des virgules et affiche chaque ligne retournée.

Essayez vous-même

ranking <- function(names, scores) {
  # Écrivez votre code ici
  character(0)
}

# Code d'entrée/sortie fourni : conservez-le tel quel
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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux d’exécution

Entraînez-vous par vous-même : Compilateur R en ligne