Διαδρομές
/
Julia
Julia
/
Ύλη
/
Διαστήματα
Δι

Διαστήματα σε Julia

1 άσκηση

Σχετικά με την έννοια Διαστήματα

Ας υποθέσουμε ότι θέλεις όλους τους μη αρνητικούς ακέραιους μέχρι το 1000. Θα ήταν γελοίο να έπρεπε να τους πληκτρολογήσεις όλους μέσα σε έναν πίνακα.

Γι' αυτό έχουμε τον τύπο range:

julia> 0:1000
0:1000

julia> typeof(0:1000)
UnitRange{Int64}

Τα range είναι πολύ συνηθισμένα: όχι μόνο για να σου γλιτώνουν την πληκτρολόγηση, αλλά και ως τύποι επιστροφής από συναρτήσεις.

Σημείωσε ότι τα range δεν είναι πίνακες.

Οι πίνακες ορίζονται από την αρχή ("άπληστη" αξιολόγηση) και χρειάζονται μνήμη ανάλογη με το μήκος του πίνακα.

Αντίθετα, τα range είναι απλώς ένα σύνολο εντολών για τη δημιουργία μιας ακολουθίας ("τεμπέλικη" αξιολόγηση ή ένας "iterator").

Αν χρειάζεσαι ένα range ως πίνακα, χρησιμοποίησε τη συνάρτηση collect() για τη μετατροπή:

julia> collect(0:5)
6-element Vector{Int64}:
 0
 1
 2
 3
 4
 5

Προαιρετικά, χρησιμοποίησε τη collect(type, range) για να ορίσεις τον τύπο του πίνακα εξόδου.

Μπορείς να ορίσεις το βήμα, στην περίπτωση αυτή 0.3:

julia>  collect(1.0:0.3:2.0)
4-element Vector{Float64}:
 1.0
 1.3
 1.6
 1.9

Έτσι, η σύνταξη είναι start:stepsize:stop. Και τα δύο άκρα είναι συμπεριληπτικά, όπως φαίνεται στο παράδειγμα με τους ακέραιους. Αν το βήμα δε διαιρεί ακριβώς το stop - start, το τελευταίο στοιχείο δε θα ξεπερνά το stop.

Για πιο λεπτομερή έλεγχο, χρησιμοποίησε τη συνάρτηση Base.range(), η οποία έχει αρκετές επιπλέον επιλογές.

Ranges χαρακτήρων

Στα range μπορούν να χρησιμοποιηθούν και μη αριθμητικές ακολουθίες. Το πιο απλό παράδειγμα είναι τα γράμματα ASCII:

julia> 'a':'d'
'a':1:'d'

julia> typeof('a':'d')
StepRange{Char, Int64}

julia> collect('a':'d')
4-element Vector{Char}:
 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
 'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
 'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
 'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)

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

Συναρτήσεις και τελεστές για ranges

Έλεγξε τα όρια ενός range με τις first() και last().

Συχνά είναι χρήσιμο να βρίσκεις αν μια συγκεκριμένη τιμή ανήκει σε ένα range. Η υποκείμενη συνάρτηση γι' αυτό είναι η in(), αλλά είναι πιο συνηθισμένο να χρησιμοποιείς τον τελεστή in ή το πιο μαθηματικό συνώνυμό του, ∈. Σε έναν κατάλληλο επεξεργαστή, η συντόμευση για το ∈ είναι \in και μετά tab.

 r = 1:10  # => 1:10
 first(r)  # => 1
 last(r)   # => 10
 7 in r    # => true
 11 ∈ r    # => false

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

Περισσότερα για τις θέσεις σε πίνακες

Για την πρόσβαση σε στοιχεία πίνακα μπορείς να χρησιμοποιήσεις range ακεραίων και πίνακες:

nums = collect(10.0:50.0)
nums[3:2:7]  # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]

Η χρήση με το end λειτουργεί επίσης, αν και η προτεραιότητα των τελεστών σημαίνει ότι μπορεί να χρειαστούν παρενθέσεις:

 nums[(end - 3):end]
4-element Vector{Float64}:
 47.0
 48.0
 49.0
 50.0

Φυσικά, οποιοδήποτε από τα στοιχεία που δίνουν τη θέση μπορεί να είναι μια ήδη υπάρχουσα ακέραια μεταβλητή.

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Διαστήματα