Menu
Coddy logo textTech

Anahtara Göre Sıralama

Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 38 / 64.

order(x), x'i sıralayacak konumları döndürür: önce en küçük değerin konumu, ardından bir sonraki ve bu şekilde devam eder. Bu vektörü başka bir vektörle indeksleyerek o vektörü x'e göre sıralayın:

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

Çıktı:

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

Azalan sıralama için decreasing = TRUE ifadesini geçirin veya sayısal bir anahtarın önüne eksi işareti koyun:

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

Çıktı:

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

Eşitlikleri bozmak için order() işlevine ikinci bir anahtar verin. Burada puanlar yüksekten düşüğe sıralanır ve eşit puanlar ada göre sıralanır:

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

Çıktı:

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

order(), ikinci bir anahtar verilmediğinde eşit değerleri özgün sıralarında tutar. Aynı konumlar, birbiriyle ilişkili birkaç vektörü yeniden sıralayabilir:

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

Çıktı:

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

Görev

Kolay

ranking(names, scores) işlevini tamamlayın. En yüksek puandan en düşük puana doğru, oyuncu başına 1. ada 95 olmak üzere bir satır döndürün. Aynı puana sahip oyuncular alfabetik olarak listelenir.

Sağlanan kod, oyuncuları virgüllerle ayrılmış name:score çiftleri olarak okur ve döndürülen her satırı yazdırır.

Kendin dene

ranking <- function(names, scores) {
  # Kodunuzu buraya yazın
  character(0)
}

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online R derleyicisi