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 אונליין