Özet - Array ve slice
- Go kursu
- Başlangıç
- Ders 46/90
- 4 dk
Slice ve append'i birleştirerek bir görev listesi yazarsın.
Array ve slice özeti
Array: sabit uzunluk, değer türü (atamada kopyalanır), [3]int. Slice: esnek, bir diziye bakan görünüm (atamada paylaşılır), []int; make, append, copy, s[a:b], len, cap. Kural: append sonucunu her zaman ata; bağımsız kopya gerekiyorsa copy ya da slices.Clone kullan.
import "slices"
s := []int{3, 1, 2}
slices.Sort(s) // [1 2 3]
fmt.Println(slices.Contains(s, 2)) // true
fmt.Println(slices.Index(s, 3)) // 2İki boyutlu dilim
Dilimlerin dilimi ile tablo kurulur; her satır ayrı oluşturulur:
tablo := make([][]int, 3)
for i := range tablo {
tablo[i] = make([]int, 3)
}
tablo[1][2] = 7
fmt.Println(tablo) // [[0 0 0] [0 0 7] [0 0 0]]Satırların uzunlukları farklı olabilir (düzensiz tablo).
Uygulama Benzersiz ve sıralı
[]int{4, 2, 4, 1, 2, 9} dilimini slices.Sort ile sırala, ardından slices.Compact ile ardışık tekrarları sil ve sonucu yazdır.
Başlangıç kodu
package main
import (
"fmt"
"slices"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"slices"
)
func main() {
s := []int{4, 2, 4, 1, 2, 9}
slices.Sort(s)
s = slices.Compact(s)
fmt.Println(s)
}Beklenen çıktı
[1 2 4 9]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir dilimden dizin 2'deki elemanı silmenin doğru yolu hangisidir?
- s.Remove(2)
- s = slices.Delete(s, 2, 3) Doğru cevap
- delete(s, 2)
- s[2] = nil
Açıklama: slices.Delete(s, i, j) [i, j) aralığını siler ve yeni dilimi döndürür; delete yalnızca map'ler içindir.
2 Sırala
s := []int{5, 2, 8}
slices.____(s)
fmt.Println(s) // [2 5 8]
s := []int{5, 2, 8}
slices.Sort(s)
fmt.Println(s) // [2 5 8]
Açıklama: slices.Sort dilimi yerinde artan sıraya dizer.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
[3]int |
Array, sabit uzunluk |
[]int |
Slice, esnek |
append |
Ekle ve ata |
slices.Clone |
Bağımsız kopya |