Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الفرز حسب مفتاح

جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 38 من 64.

تعيد order(x) المواضع التي سترتّب x: أولًا موضع أصغر قيمة، ثم موضع القيمة التالية، وهكذا. استخدم متجهًا آخر للفهرسة بها لترتيب ذلك المتجه وفقًا لـ x:

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

الناتج:

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

للترتيب التنازلي، مرّر decreasing = TRUE، أو ضع علامة ناقص أمام مفتاح رقمي:

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

الناتج:

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

امنح order() مفتاحًا ثانيًا لكسر حالات التعادل. هنا تُرتَّب الدرجات من الأعلى إلى الأدنى، وتُرتَّب الدرجات المتساوية حسب الاسم:

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

الناتج:

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

order() تحافظ على القيم المتساوية بترتيبها الأصلي عند عدم إعطاء مفتاح ثانٍ. ويمكن للمواضع نفسها إعادة ترتيب عدة متجهات تنتمي إلى بعضها:

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

الناتج:

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

التحدي

سهل

أكمل ranking(names, scores). أعد سطرًا واحدًا لكل لاعب، مثل 1. ada 95، بدءًا من أعلى نتيجة وصولًا إلى أدنى نتيجة. يُدرج اللاعبون الذين لديهم النتيجة نفسها أبجديًا.

يقرأ الكود المرفق اللاعبين على شكل أزواج name:score مفصولة بفواصل، ويطبع كل سطر مُعاد.

جرّب بنفسك

ranking <- function(names, scores) {
  # اكتب الكود الخاص بك هنا
  character(0)
}

# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
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 iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم R عبر الإنترنت