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:) פועלות באותו אופן, אך מחזירות איבר אופציונלי יחיד במקום עותק ממוין.
אתגר
בינוניקראו שורת קלט אחת: רשימה של זוגות name:age המופרדים בפסיקים.
הדפיסו שלוש שורות:
- שמות ממוינים לפי גיל בסדר עולה, ומחוברים באמצעות
,. במקרה של שוויון, מיינו את השמות הזהים לפי סדר אלפביתי. - שם האדם המבוגר ביותר (השתמשו ב־
max(by:)). במקרה של שוויון, הראשון שמופיע הוא הזוכה. - שם האדם הצעיר ביותר (השתמשו ב־
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:) למציאת הצעיר ביותר
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
5פונקציות מסדר גבוה חלק 1
מיפוי (Map)סינון (Filter)צמצום (Reduce)שרשור map, filter ו-reduceסיכום – סטטיסטיקות מיליםתרגלו בעצמכם: Swift אונליין