Μπορείτε να εξηγήσετε τις διαφορές μεταξύ των λειτουργιών 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 συνδυάζει εσωτερικές συλλογές μετά τη μετατροπή.