Menu
CoddyTech

التكرار عبر الأسماء

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

تمرّ حلقة for على names(x) بكل مفتاح، وتعطي x[[key]] القيمة الخاصة بذلك المفتاح:

scores <- c(ada = 91, bo = 78, cy = 85)
for (name in names(scores)) {
  cat(name, "scored", scores[[name]], "\n")
}

الناتج:

ada scored 91 
bo scored 78 
cy scored 85 

تحتفظ العناصر بالترتيب الذي أُضيفت به. استخدم حلقة على sort(names(x)) للحصول على ترتيب أبجدي:

scores <- c(cy = 85, ada = 91, bo = 78)
for (name in sort(names(scores))) {
  cat(name, scores[[name]], "\n")
}

الناتج:

ada 91 
bo 78 
cy 85 

يؤدي التكرار على المدخلات وتحديث جدول البحث إلى حساب عدد مرات ظهور كل قيمة. في المرة الأولى التي تظهر فيها كلمة، تكون قيمتها 1، وبعد ذلك تزداد بمقدار 1:

words <- c("red", "blue", "red", "green", "red")
counts <- c()
for (w in words) {
  if (w %in% names(counts)) {
    counts[w] <- counts[w] + 1
  } else {
    counts[w] <- 1
  }
}
print(counts[["red"]])
print(names(counts))

الناتج:

[1] 3
[1] "red"   "blue"  "green"

لإنشاء أسطر الإخراج، اجمعها في متجه داخل الحلقة ثم أعدها أو اطبعها في النهاية:

scores <- c(ada = 91, bo = 78)
lines <- c()
for (name in names(scores)) {
  lines <- c(lines, paste0(name, ": ", scores[[name]]))
}
cat(lines, sep = "\n")

الإخراج:

ada: 91
bo: 78
challenge icon

التحدي

سهل

أكمل word_counts(words). أعد سطرًا واحدًا لكل كلمة مميزة، بترتيب أبجدي، بالتنسيق word: count.

يقرأ الكود المرفق الكلمات في سطر واحد تفصل بينها مسافات، ويطبع كل سطر مُعاد.

جرّب بنفسك

word_counts <- function(words) {
  # اكتب شيفرتك هنا
  character(0)
}

# شيفرة الإدخال والإخراج المقدّمة: اتركها كما هي
input <- suppressWarnings(readLines(file("stdin")))
cat(word_counts(strsplit(input[1], " ")[[1]]), sep = "\n")
quiz iconاختبر نفسك

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

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

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