Menu
Coddy logo textTech

Ordenando por uma Chave

Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 38 de 64.

order(x) retorna as posições que ordenariam x: primeiro a posição do menor valor, depois a próxima, e assim por diante. Use outro vetor como índice com ele para ordenar esse vetor por x:

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

Saída:

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

Para ordenar em ordem decrescente, passe decreasing = TRUE ou coloque um sinal de menos antes de uma chave numérica:

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

Saída:

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

Dê a order() uma segunda chave para desempatar. Aqui, as pontuações são ordenadas da maior para a menor, e as pontuações iguais são ordenadas pelo nome:

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

Saída:

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

order() mantém os valores empatados em sua ordem original quando nenhuma segunda chave é fornecida. As mesmas posições podem reordenar vários vetores que pertencem juntos:

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

Saída:

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

Desafio

Fácil

Complete ranking(names, scores). Retorne uma linha por jogador, 1. ada 95, da maior pontuação para a menor. Jogadores com a mesma pontuação são listados em ordem alfabética.

O código fornecido lê os jogadores como pares name:score separados por vírgulas e imprime cada linha retornada.

Experimente você mesmo

ranking <- function(names, scores) {
  # Escreva seu código aqui
  character(0)
}

# Código de entrada/saída fornecido: mantenha-o como está
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 seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de R online