Menu
Coddy logo textTech

מעבר בלולאה על שמות

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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 אונליין