Λί

Λίστες σε Elixir

47 ασκήσεις

Σχετικά με την έννοια Λίστες

Οι λίστες είναι ένας βασικός τύπος δεδομένων στην Elixir για να κρατούν μια συλλογή τιμών. Οι λίστες είναι αμετάβλητες, που σημαίνει ότι δεν μπορούν να τροποποιηθούν. Κάθε πράξη που αλλάζει μια λίστα επιστρέφει μια νέα λίστα. Οι λίστες υλοποιούν το πρωτόκολλο Enumerable, που επιτρέπει τη χρήση συναρτήσεων των μονάδων Enum και Stream.

Οι λίστες στην Elixir υλοποιούνται ως συνδεδεμένες λίστες και όχι ως πίνακες με συνεχόμενες θέσεις μνήμης. Επομένως, η πρόσβαση σε ένα στοιχείο μιας λίστας απαιτεί γραμμικό χρόνο, ανάλογα με το μήκος της λίστας.

Οι λίστες μπορούν να γραφτούν σε μορφή παράθεσης στοιχείων, σε συμβολισμό κεφαλής-ουράς (που χρησιμοποιεί τον τελεστή cons, |) ή σε συνδυασμό και των δύο:

# Literal Form
[]
[1]
[1, 2, 3]

# Head-tail Notation
[]
# same as [1]
[1 | []]
# same as [1, 2, 3]
[1 | [2 | [3 | []]]]

# Mixed
# same as [1, 2, 3]
[1 | [2, 3]]

Μπορεί επίσης να υπάρχουν περισσότερα από ένα στοιχεία πριν από τον τελεστή cons (|).

# Multiple prepends
[1, 2, 3 | [4, 5]]

Ο συμβολισμός κεφαλής-ουράς μπορεί να χρησιμοποιηθεί για να προσθέσεις στοιχεία στο τέλος μιας λίστας.

list = [2, 1]

[3, 2, 1] == [3 | list]
# => true

Η προσθήκη στοιχείων στο τέλος μιας λίστας κατά την επανάληψη θεωρείται αντιπρότυπο. Για να προσθέσεις ένα στοιχείο στο τέλος, πρέπει να διασχίσεις ολόκληρη τη λίστα και να το βάλεις εκεί, επομένως η προσθήκη ενός νέου στοιχείου σε κάθε επανάληψη θα απαιτούσε να διασχίζεις ολόκληρη τη λίστα σε κάθε επανάληψη.

Μπορούμε να πετύχουμε το ίδιο αποτέλεσμα προσθέτοντας ένα στοιχείο στην αρχή της ανεστραμμένης λίστας και μετά αντιστρέφοντας το αποτέλεσμα. Η προσθήκη στην αρχή είναι γρήγορη πράξη και απαιτεί σταθερό χρόνο.

# Appending to the end of a list (potentially slow)
[1, 2, 3] ++ [4] ++ [5] ++ [6]

# Prepend to the start of a list (faster, due to the nature of linked lists)
[6 | [5 | [4 | [3, 2, 1]]]]
# then reverse!

Υπάρχουν αρκετές συνηθισμένες συναρτήσεις της Kernel για λίστες:

  • Η hd/1 επιστρέφει την κεφαλή μιας λίστας, δηλαδή το πρώτο στοιχείο της.
  • Η tl/1 επιστρέφει την ουρά της λίστας, δηλαδή τη λίστα χωρίς το πρώτο στοιχείο.
  • Η length/1 επιστρέφει τον αριθμό των στοιχείων της λίστας.
  • Η in/2 επιστρέφει μια τιμή Boolean που δείχνει αν το στοιχείο είναι μέλος της λίστας.

Υπάρχει επίσης η μονάδα List.

Οι λίστες μπορούν να περιέχουν οποιονδήποτε τύπο δεδομένων, ακόμα και ανάμειξη διαφορετικών τύπων.

list = [1, :a, 2.0, "string"]
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Λίστες

Η εξάσκηση είναι κλειδωμένη

Ξεκλείδωσε 6 ακόμη ασκήσεις για να εξασκηθείς στην έννοια Λίστες