Menu
Coddy logo textTech

sorted(by:)

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Swift של Coddy. שיעור 30 מתוך 56.

השתמשת ב־.sorted() על מערכים של ערכי Comparable, כמו מספרים או מחרוזות. כשרוצים למיין לפי משהו אחר, יש להעביר סגירה שמקבלת שני איברים ומחזירה true כשהאיבר הראשון צריך להופיע לפני השני.

let words = ["banana", "hi", "hello"]
let byLength = words.sorted { $0.count < $1.count }
print(byLength)              // ["hi", "hello", "banana"]

לסדר יורד, החליפו את ההשוואה:

let down = words.sorted { $0.count > $1.count }
print(down)                  // ["banana", "hello", "hi"]

הסגירה יכולה להשוות כל ערך נגזר: אורך, אות אחרונה, ערך במילון גיבוב. מה שהסגירה משווה קובע את המיון.

min(by:) ו־max(by:) פועלות באותו אופן, אך מחזירות איבר אופציונלי יחיד במקום עותק ממוין.

challenge icon

אתגר

בינוני

קראו שורת קלט אחת: רשימה של זוגות name:age המופרדים בפסיקים.

הדפיסו שלוש שורות:

  1. שמות ממוינים לפי גיל בסדר עולה, ומחוברים באמצעות ,. במקרה של שוויון, מיינו את השמות הזהים לפי סדר אלפביתי.
  2. שם האדם המבוגר ביותר (השתמשו ב־max(by:)). במקרה של שוויון, הראשון שמופיע הוא הזוכה.
  3. שם האדם הצעיר ביותר (השתמשו ב־min(by:)). במקרה של שוויון, הראשון שמופיע הוא הזוכה.

עבור הקלט alice:30,bob:22,cara:30,dan:18, הפלט הוא:

dan,bob,alice,cara
alice
dan

נסו בעצמכם

let people = readLine()!.components(separatedBy: ",").map { pair -> (String, Int) in
    let parts = pair.components(separatedBy: ":")
    return (parts[0], Int(parts[1])!)
}

// TODO: למיין לפי גיל בסדר עולה (במקרה של שוויון, לפי שם); max(by:) למציאת המבוגר ביותר; min(by:) למציאת הצעיר ביותר
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: Swift אונליין