מדריך למיון בקוטלין

1. סקירה כללית

קוטלין מתבסס על גבי מסגרת Java Collection באמצעות שיטות הרחבה. זה משפר באופן דרמטי את השימושיות ואת הקריאות ללא צורך בתלות של צד שלישי כגון Apache Commons או Guava.

במדריך זה נתמקד במיון בקוטלין. כמו כן, נשתמש ב- kotlin. השוואות חבילה ליישום כללי הזמנה מורכבים.

2. מיון אוסף

קוטלין מספקת מספר כלי עזר כדי להקל על תהליך מיון האוספים. בואו לחקור כמה משיטות אלה.

2.1. סוג

הדרך הפשוטה ביותר למיין אוסף היא להתקשר ל סוג שיטה. בשיטה זו ישתמש בסדר הטבעי של האלמנטים. כמו כן, הוא יורה לכיוון עולה כברירת מחדל, כך ש- 'a' הוא לפני 'b' ו- '1' הוא לפני '2':

val sortedValues ​​= mutableListOf (1, 2, 7, 6, 5, 6) sortedValues.sort () println (sortedValues)

והתוצאה של הקוד הנ"ל היא:

[1, 2, 5, 6, 6, 7]

חשוב לציין שהשתמשנו באוסף משתנה. הסיבה היא ש ה סוג השיטה תמיין במקום. אם אנו רוצים שהתוצאה תחזור כרשימה חדשה, עלינו רק להשתמש ב- מְמוּיָן במקום זאת.

יתר על כן, אנו יכולים להשתמש ב- מיין יורד אוֹ לַהֲפוֹך שיטות למיון בסדר יורד.

2.2. מיין לפי

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

val sortedValues ​​= mutableListOf (1 ל "a", 2 ל "b", 7 ל "c", 6 ל "d", 5 ל "c", 6 ל "e") sortedValues.sortBy {it.second} println (sortedValues)

והתוצאה של הקוד הנ"ל היא:

[(1, א), (2, ב), (7, ג), (5, ג), (6, ד), (6, ה)]

שוב, האוסף צריך להיות משתנה כי מיין לפי השיטה תמיין במקום. אם אנו רוצים שהתוצאה תחזור כרשימה חדשה, עלינו להשתמש ב- מיון לפי שיטה במקום מיין לפי שיטה.

כמו בעבר, עבור סדר יורד, אנו יכולים להשתמש ב- sortByDescending אוֹ לַהֲפוֹך שיטות.

2.3. SortWith

לשימוש מתקדם יותר (לשילוב של מספר כללים, למשל), אנו יכולים להשתמש ב- מיין עם שיטה.

אנחנו יכולים להעביר א משווה חפץ כוויכוח. בקוטלין יש לנו מספר דרכים ליצור משווה חפצים ואנחנו נסקור את זה בסעיף הבא:

val sortedValues ​​= mutableListOf (1 ל- "a", 2 ל- "b", 7 ל- "c", 6 ל- "d", 5 ל- "c", 6 ל- "e") sortedValues.sortWith (CompareBy ({it. שנייה}, {it.first})) println (sortedValues)

והתוצאה של הקוד לעיל היא שהם ממוינים לפי אות ואז לפי מספר:

[(1, א), (2, ב), (5, ג), (7, ג), (6, ד), (6, ה)]

בגלל ה מיין עם יעשה את המיון במקום, עלינו להשתמש באוסף משתנה. אם אנו רוצים שהתוצאה תוחזר כאוסף חדש, עלינו להשתמש ב- מיון עם שיטה במקום מיין עם שיטה.

לסדר יורד, אנו יכולים להשתמש ב- לַהֲפוֹך שיטה או לחלופין להגדיר את הזכות משווה.

3. השוואה

Kotlin מכיל חבילה שימושית מאוד לבניית משווהkotlin. השוואות. בחלקים הבאים נדון:

  • משווה יצירה
  • טיפול ב ריק ערכים
  • ביטול ההזמנה
  • משווה הארכת כללים

3.1. משווה יצירה

על מנת לפשט את יצירתנו משווה, Kotlin מביא שיטות מפעל רבות כדי להפוך את הקוד שלנו לביטוי יותר.

הכי פשוט משווה מפעל זמין הוא הזמנה טבעית (). אין צורך בטיעונים והסדר עולה כברירת מחדל:

val ascComparator = NaturalOrder ()

עבור אובייקטים עם מאפיינים מרובים, אנו יכולים להשתמש ב- להשוות מאת שיטה. כטיעונים, אנו נותנים מספר משתנה של פונקציות (כללי מיון) אשר יחזירו כל אחד a ניתן להשוות לְהִתְנַגֵד. לאחר מכן, פונקציות אלה ייקראו ברצף עד לתוצאה ניתן להשוות האובייקט מוערך כלא שווה או עד שכל הפונקציות נקראות.

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

val complexComparator = CompareBy({it.first}, {it.second})

אתם מוזמנים לחקור kotlin. השוואות לגלות את כל המפעלים הזמינים.

3.2. טיפול ב ריק ערכים

דרך פשוטה לשפר את שלנו משווה עם ריק טיפול ערך הוא להשתמש ב- nulls ראשית אוֹ nullsLast שיטות. שיטות אלה ימוינו ריק ערכים במקום הראשון או האחרון בהתאמה:

val sortedValues ​​= mutableListOf (1 ל- "a", 2 ל- null, 7 ל- "c", 6 ל- "d", 5 ל- "c", 6 ל- "e") sortedValues.sortWith (nullsLast (CompareBy {it.second })) println (sortedValues)

התוצאה של הקוד הנ"ל תהיה:

[(1, א), (7, ג), (5, ג), (6, ד), (6, ה), (2, null)]

אנו יכולים לראות שהערך האחרון באוסף המתקבל הוא הערך איתו ריק ערך.

3.3. ביטול הצו

כדי להפוך את הסדר, אנו יכולים להשתמש ב- סדר הפוך שיטה או הפוך שיטה. לשיטה הקודמת אין ויכוחים ומחזירה סדר יורד. ניתן ליישם את השיטה האחרונה על משווה אובייקט והוא יחזיר את הפוך משווה לְהִתְנַגֵד.

לבנות א משווה באמצעות סדר טבעי יורד אנו יכולים לעשות:

סדר הפוך()

3.4. הרחבת כללי השוואה

משווה ניתן לשלב או להרחיב אובייקטים עם כללי מיון נוספים באמצעות לאחר מכן שיטות זמינות ב kotlin.comparable חֲבִילָה.

רק כאשר המשווה הראשון מוערך לשווה, ישמש את המשווה השני.

רשימת התלמידים שלנו מכילה גיל ושם לכל אדם. אנו רוצים לסדר אותם מהצעירים לגדולים ביותר, וכשהם בגיל זהה, הם יורדים על פי השם:

val students = mutableListOf (21 ל- "Helen", 21 ל- "Tom", 20 ל- "Jim") val ageComparator = השווה לפי {it.first} val ageAndNameComparator = ageComparator.thenByDescending {it.second} println (students.sortedWith (ageAndNameComparator))

התוצאה של הקוד הנ"ל תהיה:

[(20, ג'ים), (21, טום), (21, הלן)]

4. מסקנה

במדריך מהיר זה ראינו כיצד להשתמש ב- סוג, מיין לפי ו מיין עם שיטות במטרה למיין אוספים בקוטלין.

מאוחר יותר, גם אנחנו השתמשנו kotlin. השוואות חבילה ליצור משווה אובייקטים וכדי לשפר אותם באמצעות כללי מיון נוספים.

ניתן למצוא את היישום של כל הדוגמאות והקטעים הללו ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found