τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Εισαγάγαμε το εάν και για στο προηγούμενο άρθρο μας. Αυτό δεν πρέπει να εξασκηθεί.continue
Δήλωση για τον υπολογισμό του αθροίσματος ζυγών αριθμών εντός του 100. Καθώς γράφουμε κώδικα,continue
δήλωση θα μας βοηθήσει να παραλείψουμε ορισμένες επαναλήψεις που δεν χρειάζονται, για παράδειγμα, σε αυτό το παράδειγμα, θα παραλείψουμε όλους τους περιττούς αριθμούς.
- sum := 0
- for i := 1; i < 100; i++{
- if i & 1 == 0 {
- continue
- }
- sum += i
- }
-
- fmt.Println("the sum is",sum)
Στον προγραμματισμό, συχνά χρειάζεται να ασχοληθούμε με ένα σύνολο στοιχείων του ίδιου τύπου, και αυτά τα σύνολα στοιχείων αντιπροσωπεύονται από συγκεκριμένες δομές δεδομένων στη γλώσσα Go. Σήμερα, θα σας παρουσιάσω λεπτομερώς διάφορους τύπους συλλογής στο Go: array, slice και map.
Αρχικά, ας ξεκινήσουμε με πίνακες. Ο πίνακας είναι η πιο βασική δομή δεδομένων στο Go Είναι μια ακολουθία στοιχείων του ίδιου τύπου. Μόλις δηλωθεί ένας πίνακας, το μήκος του δεν μπορεί να αλλάξει. Η δήλωση και η προετοιμασία των πινάκων είναι πολύ απλή,
Όταν δηλώνετε έναν πίνακα, πρέπει να καθορίσετε τον τύπο και το μήκος του πίνακα. Δείτε πώς δηλώνεται ένας πίνακας:
var arrayName [arrayLength]elementType
Για παράδειγμα, δηλώστε έναν ακέραιο πίνακα μήκους 5:
var numbers [5]int
Μπορείτε να αρχικοποιήσετε έναν πίνακα με διάφορους τρόπους:
var numbers = [5]int{1, 2, 3, 4, 5}
:=
Σύντομη δήλωση:numbers := [5]int{1, 2, 3, 4, 5}
numbers := [...]int{1, 2, 3, 4, 5}
numbers := [5]int{0: 1, 4: 5}
Μπορείτε να αποκτήσετε πρόσβαση σε στοιχεία σε έναν πίνακα ανά ευρετήριο, ξεκινώντας από το 0:
value := numbers[2] // 获取索引为 2 的元素
μπορείς να χρησιμοποιήσειςfor
Κάντε βρόχο σε όλα τα στοιχεία ενός πίνακα:
- for i, value := range numbers {
- fmt.Printf("Index: %d, Value: %dn", i, value)
- }
Μπορείτε να χρησιμοποιήσετε το ενσωματωμένοlen
Συνάρτηση για να λάβετε το μήκος ενός πίνακα:
length := len(numbers)
Εάν ένας πίνακας δεν έχει αρχικοποιηθεί ρητά, τα στοιχεία του ορίζονται αυτόματα στη μηδενική τιμή του τύπου τους. Για παράδειγμα, η μηδενική τιμή ενός ακέραιου πίνακα είναι 0:
var numbers [5]int // 所有元素都是 0
Η γλώσσα Go υποστηρίζει επίσης πολυδιάστατους πίνακες. Το παρακάτω είναι ένα παράδειγμα δήλωσης και προετοιμασίας ενός ακέραιου πίνακα 2x3:
- var matrix [2][3]int
- matrix = [2][3]int{{1, 2, 3}, {4, 5, 6}}
Δεδομένου ότι το μήκος του πίνακα είναι σταθερό, αυτό μπορεί να μην είναι πολύ ευέλικτο σε ορισμένες περιπτώσεις. Εάν χρειάζεστε μια συλλογή μεταβλητού μήκους, μπορείτε να χρησιμοποιήσετε φέτες.
Ακολουθεί το slice, το οποίο είναι ένας πιο ευέλικτος ενσωματωμένος τύπος που μπορεί να θεωρηθεί ως ένας δυναμικός πίνακας. Το μήκος της φέτας είναι μεταβλητό και δημιουργείται με βάση έναν πίνακα, παρέχοντας μεγαλύτερη ευκολία. Δείτε πώς μπορείτε να δηλώσετε και να αρχικοποιήσετε ένα slice:
- s := make([]int, 3) // 创建一个长度为3的整型切片
- s[0] = 1 // 切片元素赋值
- s[1] = 2
- s[2] = 3
- s = append(s, 4) // 向切片追加元素
Στη γλώσσα Go, αν και οι πίνακες και οι φέτες χρησιμοποιούνται και οι δύο για την αποθήκευση μιας σειράς στοιχείων του ίδιου τύπου, έχουν σημαντικές διαφορές στην κατανομή μνήμης, τη μεταβλητότητα μεγέθους και τη χρήση. Ακολουθούν οι κύριες διαφορές μεταξύ πινάκων και κομματιών:
[3]int
και[4]int
είναι διαφορετικοί τύποι.[]int
Είναι ο κοινός τύπος για όλες τις φέτες ακέραιων αριθμών.make
Λειτουργία ή αποκοπή από έναν πίνακα για προετοιμασία, χωρίς καθορισμένο μέγεθος.Ακολουθούν παραδείγματα αρχικοποίησης για πίνακες και φέτες:
- // 数组
- var arr [3]int = [3]int{1, 2, 3}
-
- // 切片
- var slice []int = []int{1, 2, 3}
- // 或者使用 make 函数
- slice := make([]int, 3)
append
Η συνάρτηση προσθέτει στοιχεία ή αποκτά υποτμήματα μέσω λειτουργιών τεμαχισμού.Ο υποκείμενος πίνακας του slice μπορεί να εκχωρηθεί στο σωρό και η χρονική πολυπλοκότητα της πρόσβασης στα στοιχεία slice είναι επίσης O(1), αλλάappend
Μπορεί να οδηγήσει σε ανακατανομή του υποκείμενου πίνακα, που είναι συνήθως μια λειτουργία O(n).Τέλος, ας δούμε τη χαρτογράφηση. Ένας χάρτης είναι ένας συσχετιστικός πίνακας στο Go που αντιστοιχίζει κλειδιά σε τιμές. Τα κλειδιά του χάρτη μπορούν να είναι οποιουδήποτε τύπου που υποστηρίζονται από τον τελεστή ισότητας, όπως ακέραιοι, αριθμοί κινητής υποδιαστολής, συμβολοσειρές, δείκτες, διεπαφές (εφόσον οι τιμές που περιέχονται στη διεπαφή είναι συγκρίσιμες), δομές και πίνακες. Η αντιστοιχισμένη τιμή μπορεί να είναι οποιουδήποτε τύπου.
Η σύνταξη για τη δήλωση ενός χάρτη είναι η εξής:
var mapName map[keyType]valueType
Για παράδειγμα, δηλώστε έναν χάρτη με κλειδιά ως συμβολοσειρές και τιμές ως ακέραιους αριθμούς:
var scores map[string]int
Αφού δηλώσετε χάρτη, πρέπει να περάσετεmake
συνάρτηση για την αρχικοποίησή του ώστε να μπορεί να χρησιμοποιηθεί:
scores = make(map[string]int)
Εναλλακτικά, μπορείτε να χρησιμοποιήσετε μια σύντομη δήλωση και να αρχικοποιήσετε:
scores := make(map[string]int)
Μπορείτε επίσης να χρησιμοποιήσετε κυριολεκτικά για αρχικοποίηση τη στιγμή της δήλωσης:
- scores := map[string]int{
- "alice": 90,
- "bob": 85,
- "charlie": 88,
- }
scores["alice"] = 90
value := scores["alice"]
Εάν το κλειδί δεν υπάρχει, θα επιστραφεί μια μηδενική τιμή για αυτόν τον τύπο τιμής.
Μπορείτε να χρησιμοποιήσετε το κόμμα -ok για να ελέγξετε αν το κλειδί υπάρχει στον χάρτη:
- value, exists := scores["alice"]
- if exists {
- // 键存在
- } else {
- // 键不存在
- }
χρήσηdelete
Η συνάρτηση μπορεί να αφαιρέσει ένα ζεύγος κλειδιού-τιμής από τον χάρτη:
delete(scores, "alice")
Εάν το κλειδί δεν υπάρχει,delete
Η συνάρτηση δεν κάνει τίποτα.
χρήσηfor
Ένας βρόχος μπορεί να διασχίσει όλα τα ζεύγη κλειδιών-τιμών στον χάρτη:
- for key, value := range scores {
- fmt.Printf("%s: %dn", key, value)
- }
Η μηδενική τιμή του χάρτη είναιnil
.έναςnil
Ένας χάρτης δεν έχει υποκείμενη δομή δεδομένων και δεν μπορεί να προσθέσει στοιχεία.Πριν προσθέσετε στοιχεία στον χάρτη, πρέπει να χρησιμοποιήσετεmake
Αρχικοποιήστε το.
Μπορείτε να χρησιμοποιήσετε το ενσωματωμένοlen
Λειτουργία για να λάβετε τον αριθμό των ζευγών κλειδιών-τιμών στον χάρτη:
length := len(scores)
Τα κλειδιά του χάρτη μπορούν να είναι οποιουδήποτε συγκρίσιμου τύπου, όπως ακέραιοι, αριθμοί κινητής υποδιαστολής, συμβολοσειρές, δείκτες, διεπαφές (εφόσον οι τιμές που περιέχονται στη διεπαφή είναι συγκρίσιμες), δομές, πίνακες κ.λπ. Οι φέτες, οι χάρτες και οι συναρτήσεις δεν μπορούν να χρησιμοποιηθούν ως πλήκτρα χάρτη, επειδή αυτοί οι τύποι δεν υποστηρίζουν συγκρίσεις ισότητας.
Στη γλώσσα Go, οι πίνακες, οι φέτες και οι χάρτες είναι τρεις κοινώς χρησιμοποιούμενες δομές δεδομένων, καθεμία από τις οποίες έχει διαφορετικά χαρακτηριστικά και εκτιμήσεις. Ακολουθούν ορισμένα σημεία που πρέπει να προσέξετε κατά τη χρήση τους:
nil
, πρέπει να αρχικοποιηθεί πριν από τη χρήση.nil
,nil
Ο χάρτης δεν μπορεί να χρησιμοποιηθεί για την αποθήκευση ζευγών κλειδιού-τιμής και πρέπει να αρχικοποιηθεί πριν από τη χρήση.delete
Η διαγραφή ενός κλειδιού που δεν υπάρχει δεν δημιουργεί σφάλμα, αλλά είναι ασφαλές να ελέγξετε εάν το κλειδί υπάρχει.