Alt slice
- Go kursu
- Başlangıç
- Ders 44/90
- 4 dk
Slice dilimleme sözdizimini öğrenirsin.
Alt slice
s[bas:son] ifadesi bas dizininden başlayıp son dizinine kadar (son hariç) bir alt dilim verir. Başlangıç ya da bitiş atlanabilir:
s := []string{"a", "b", "c", "d", "e"}
fmt.Println(s[1:3]) // [b c]
fmt.Println(s[:2]) // [a b]
fmt.Println(s[3:]) // [d e]Alt dilim yeni dizi oluşturmaz; aynı diziyi paylaşır. Alt dilimde değişiklik yapmak aslındakini de değiştirir.
Paylaşım tuzağı
Alt dilime append yapmak, kapasite yetiyorsa asıl dilimin sonraki elemanlarının üzerine yazar:
s := []int{1, 2, 3, 4}
ilk := s[:2] // [1 2], cap 4
ilk = append(ilk, 99)
fmt.Println(s) // [1 2 99 4] ← 3 ezildi!Bunu önlemek için üç dizinli dilimleme kapasiteyi sınırlar: s[:2:2]. Böylece append yeni bir dizi ayırır.
Uygulama Ortadaki elemanlar
s := []int{1, 2, 3, 4, 5} tanımla. orta := s[1:4] al, orta[0] = 20 yap ve hem orta'yı hem s'yi tek satırda yazdır (paylaşımı gör).
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func main() {
s := []int{1, 2, 3, 4, 5}
orta := s[1:4]
orta[0] = 20
fmt.Println(orta, s)
}Beklenen çıktı
[20 3 4] [1 20 3 4 5]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>s := []int{10, 20, 30, 40}</code> için <code>s[1:3]</code> nedir?
- [10 20 30]
- [20 30 40]
- [30]
- [20 30] Doğru cevap
Açıklama: Başlangıç dahil, bitiş hariçtir: dizin 1 (20) ve 2 (30).
2 Son iki eleman
s := []string{"a", "b", "c", "d"}
son := s[____] // [c d]
s := []string{"a", "b", "c", "d"}
son := s[2:] // [c d]
Açıklama: s[2:] dizin 2'den sona kadar olan elemanları verir.
3 İfade ve sonuç (s = [a b c d e])
| Kavram | Anlamı |
|---|---|
s[1:3] |
[b c] |
s[:2] |
[a b] |
s[3:] |
[d e] |
s[:] |
[a b c d e] |