המרת רשימה למפה בקוטלין

1. הקדמה

במדריך מהיר זה נראה כיצד נוכל להמיר א רשימה אל א מַפָּה אנינ קוטלין.

2. יישום

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

val user1 = User ("John", 18, listOf ("Hiking")) val user2 = User ("Sara", 25, listOf ("Chess")) val user3 = User ("Dave", 34, listOf (" משחקים ")) @ כיף המבחן נתון List_whenConvertToMap_thenResult () {val myList = listOf (user1, user2, user3) val myMap = myList.map {it.name to it.age} .toMap () assertTrue (myMap.get (" John " ) == 18)}

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

{ג'ון = 18, שרה = 25, דייב = 34}

אותו דבר יקרה כאשר אנו ממפים מערך קטן יותר של חוּט:

@Test fun givenStringList_whenConvertToMap_thenResult () {val myList = listOf ("a", "b", "c") val myMap = myList.map {it to it} .toMap () assertTrue (myMap.get ("a") = = "a")}

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

ואז כחלופה שנייה להמיר א רשימה אל א מַפָּה הוא באמצעות הקשורים מאת שיטה:

@Test fun givenList_whenAssociatedBy_thenResult () {val myList = listOf (user1, user2, user3) val myMap = myList.associateBy ({it.name}, {it.hobbies}) assertTrue (myMap.get ("John") !!. מכיל ("טיולים"))}

שינינו את הבדיקה כך שתשתמש במערך כערך:

{ג'ון = [טיולים, שחייה], שרה = [שחמט, משחקי חברה], דייב = [משחקים, ספורט מירוצים]}

3. באיזה אחד להשתמש?

אם שתי השיטות בעצם משיגות את אותה פונקציונליות, באיזו מהן עלינו להשתמש?

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

עבור אוספים מסוגים אחרים, חָבֵר API יהיה הבחירה הטובה ביותר.

4. מיפוי באמצעות חָבֵר* שיטות

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

4.1. ה חָבֵר() שיטה

נתחיל באמצעות חָבֵר שיטה - אשר פשוט מחזירה א מַפָּה באמצעות פונקציית טרנספורמציה באלמנטים של המערך:

@Test fun givenStringList_whenAssociate_thenResult () {val myList = listOf ("a", "b", "c", "d") val myMap = myList.associ {it to it} assertTrue (myMap.get ("a") = = "a")}

4.2. ה associateTo שיטה

בשיטה זו נוכל לאסוף את האלמנטים שלנו למפה קיימת כבר:

@Test fun givenStringList_whenAssociateTo_thenResult () {val myList = listOf ("a", "b", "c", "c", "b") val myMap = mutableMapOf () myList.associateTo (myMap) {it to it} assertTrue (myMap.get ("a") == "a")}

חשוב לזכור להשתמש במשתנה מפה - דוגמה זו לא תעבוד עם דוגמה שאינה ניתנת לשינוי.

4.3. ה associateByTo שיטה

ה associateByTo נותן לנו את הגמישות הגבוהה ביותר מבין השלושה מכיוון שנוכל לעבור את המפה שתאוכלס, א keySelector פוּנקצִיָה. עבור כל מפתח שצוין, הערך המשויך יהיה האובייקט ממנו חולץ המפתח:

@Test fun givenStringList_whenAssociateByToUser_thenResult () {val myList = listOf (user1, user2, user3, user4) val myMap = mutableMapOf () myList.associateByTo (myMap) {it.name} assertTrue (myMap.get (!!). !! גיל == 34)}

או שאנחנו יכולים להשתמש ב- valueTransform פוּנקצִיָה:

@Test fun givenStringList_whenAssociateByTo_thenResult () {val myList = listOf (user1, user2, user3, user4) val myMap = mutableMapOf () myList.associateByTo (myMap, {it.name}, {it.age}) assertTrue (my "דייב") == 34)}

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

5. מסקנה

במאמר זה בחנו דרכים שונות להמרת א רשימה אל א מַפָּה בקוטלין.

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


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