Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε τις διαφορές μεταξύ των λειτουργιών flatMap και compactMap στις γλώσσες προγραμματισμού;

sobes.tech AI

Απάντηση από AI

Σε γλώσσες προγραμματισμού όπως η Swift, τα flatMap και compactMap χρησιμοποιούνται για τη μετατροπή συλλογών, αλλά έχουν διαφορετικούς σκοπούς:

  • Το flatMap εφαρμόζεται για τη μετατροπή των στοιχείων μιας συλλογής σε συλλογές και στη συνέχεια "επίπεδο" (flatten) το αποτέλεσμα σε ένα μόνο επίπεδο. Για παράδειγμα, αν κάθε στοιχείο μετατραπεί σε έναν πίνακα, το flatMap θα ενώσει όλους αυτούς τους πίνακες σε έναν.

  • Το compactMap μετατρέπει τα στοιχεία της συλλογής, απορρίπτοντας ταυτόχρονα όλες τις τιμές nil (ή απουσίες). Αυτό είναι χρήσιμο όταν η μετατροπή μπορεί να επιστρέψει μια προαιρετική τιμή και θέλετε να πάρετε έναν πίνακα μόνο με μη κενά αποτελέσματα.

Παράδειγμα σε Swift:

let numbers = ["1", "2", "three", "4"]

// compactMap μετατρέπει τις συμβολοσειρές σε Int, απορρίπτοντας τις μη αριθμητικές
let ints = numbers.compactMap { Int($0) } // [1, 2, 4]

// flatMap με πίνακες
let nested = [[1, 2], [3, 4], [5]]
let flat = nested.flatMap { $0 } // [1, 2, 3, 4, 5]

Έτσι, το compactMap φιλτράρει και μετατρέπει, ενώ το flatMap συνδυάζει εσωτερικές συλλογές μετά τη μετατροπή.