CodeBlanks Logo Icon CodeBlanks

Alt slice

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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
s := []string{"a", "b", "c", "d"}
son := s[____]  // [c d]
Cevap
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]

Başlangıç bölümündeki tüm dersler