Slice tanımı
- Go kursu
- Başlangıç
- Ders 42/90
- 4 dk
Slice ile dinamik dizileri tanımlamayı öğrenirsin.
Slice tanımı
Slice (dilim), bir dizinin bir bölümüne bakan esnek uzunluklu bir görünümdür. Tür yazımında uzunluk yoktur: []int.
a := []int{1, 2, 3} // değişmez değerle
b := make([]int, 5) // [0 0 0 0 0]
var c []int // nil dilim, len 0
fmt.Println(len(a), len(b), c == nil) // 3 5 trueBir dilim üç şey tutar: alttaki diziye işaretçi, uzunluk (len) ve kapasite (cap).
nil ve boş dilim
var s []int nil bir dilimdir; s := []int{} ise boş ama nil olmayan bir dilimdir. İkisinde de len 0'dır, range ve append sorunsuz çalışır. Fark JSON'da görünür: nil dilim null, boş dilim [] olarak kodlanır. Dilimler == ile karşılaştırılamaz (yalnızca nil ile); içerik karşılaştırması için slices.Equal kullanılır.
Uygulama Bağımsız kopya
a := []int{1, 2, 3} tanımla. b := make([]int, len(a)) ve copy(b, a) ile kopya oluştur, b[0] = 99 yap ve a ile b'yi tek satırda yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func main() {
a := []int{1, 2, 3}
b := make([]int, len(a))
copy(b, a)
b[0] = 99
fmt.Println(a, b)
}Beklenen çıktı
[1 2 3] [99 2 3]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>b := a</code> (a bir dilim) sonrasında <code>b[0] = 99</code> yapılırsa <code>a[0]</code> ne olur?
- panic
- 99; ikisi aynı diziyi paylaşır Doğru cevap
- Değişmez
- 0
Açıklama: Dilim ataması yalnızca başlığı kopyalar; alttaki dizi ortaktır. Bağımsız kopya için copy ya da slices.Clone kullanılır.
2 Hazır uzunluk
puanlar := ____([]int, 3) // [0 0 0]
puanlar := make([]int, 3) // [0 0 0]
Açıklama: make verilen uzunlukta, sıfır değerlerle dolu bir dilim oluşturur.
3 Tanım ve sonuç
| Kavram | Anlamı |
|---|---|
[]int{1, 2} |
len 2 |
make([]int, 3) |
[0 0 0] |
var s []int |
nil, len 0 |
[]int{} |
Boş, nil değil |