Golang 101: Kesit (Slice)

yakar

Aydın Yakar

Posted on October 7, 2021

Golang 101: Kesit (Slice)

Kesit (Slice) bir bakıma dizidir fakat diziden en önemli farkı boyutunun değiştirilebilir olmasıdır. Kesitler genişleyebilirler, bölünebilirler.

package main

import "fmt"

func main() {

    // Kesit Oluşturma
    kesit := make([]string, 3)
    fmt.Println("Boş kesit:", kesit)

    // Değer Atama
    kesit[0] = "a"
    kesit[1] = "b"
    kesit[2] = "c"
    fmt.Println("Kesit:", kesit)
    fmt.Println("Boyut:", len(kesit))
    fmt.Println("Kapasite:", cap(kesit))

    // Kesiti Genişletme
    kesit = append(kesit, "d")
    kesit = append(kesit, "e", "f")
    fmt.Println("Yeni Kesit:", kesit)

    // Kesiti Kopyalama
    c := make([]string, len(kesit))
    copy(c, kesit)
    fmt.Println("Kopya Kesit:", c)

    // Kesiti Bölme
    k := kesit[2:5]
    fmt.Println("Kesit Bölme 1:", k)

    k = kesit[:5]
    fmt.Println("Kesit Bölme 2:", k)

    k = kesit[2:]
    fmt.Println("Kesit Bölme 3:", k)

    // Kesit Tanımı ve Değer Atama
    t := []string{"g", "h", "i"}
    fmt.Println("Kesit 2:", t)

    // 2 Boyutlu Kesit
    kesit2 := make([][]int, 3)
    for i := 0; i < 3; i++ {
        boyut := i + 1
        kesit2[i] = make([]int, boyut)
        for j := 0; j < boyut; j++ {
            kesit2[i][j] = i + j
        }
    }
    fmt.Println("2 Boyutlu Kesit: ", kesit2)
}
Enter fullscreen mode Exit fullscreen mode
Boş kesit: [  ]
Kesit: [a b c]
Boyut: 3
Kapasite: 3
Yeni Kesit: [a b c d e f]
Kopya Kesit: [a b c d e f]
Kesit Bölme 1: [c d e]
Kesit Bölme 2: [a b c d e]
Kesit Bölme 3: [c d e f]
Kesit 2: [g h i]
2 Boyutlu Kesit:  [[0] [1 2] [2 3 4]]
Enter fullscreen mode Exit fullscreen mode

çalıştır!

Kesit Oluşturma

    kesit := make([]string, 3)
    fmt.Println("Boş kesit:", kesit)
Enter fullscreen mode Exit fullscreen mode

Kesitler make fonksiyonu ile tür ve eleman sayısı belirtilerek oluşturulur. Örnekte 3 elemanlı []string türünde bir slice oluşturuldu.

Değer Atama

    kesit[0] = "a"
    kesit[1] = "b"
    kesit[2] = "c"
    fmt.Println("Kesit:", kesit)
    fmt.Println("Boyut:", len(kesit))
    fmt.Println("Kapasite:", cap(kesit))
Enter fullscreen mode Exit fullscreen mode

Kesitlere dizilerde olduğu gibi değer atanır. Kesit boyutuna dizide olduğu gibi len() ile bakılabilir. Aynı zamanda kesitin kapasitesine de cap() ile bakabilirsiniz.

Kesiti Genişletme, Değer Ekleme

    kesit = append(kesit, "d")
    kesit = append(kesit, "e", "f")
Enter fullscreen mode Exit fullscreen mode

Kesiti genişletmek için append() fonksiyonu kullanılır. Birden fazla değeri tek seferde ekleyebilirsiniz.

Kesiti Kopyalama

    c := make([]string, len(kesit))
    copy(c, kesit)
Enter fullscreen mode Exit fullscreen mode

Mevcut kesiti copy() fonksiyonu ile kopyalayabilirsiniz. Örnekte önce boş bir kesit olarak c değişkeni oluşturuluyor. Oluşturulan c'nin eleman sayısı kopyalanacak kesitin sayısıyla eşit olsun diye len() ile belirtiliyor.

Kesiti Bölme

    k := kesit[2:5]

    k = kesit[:5]

    k = kesit[2:]
Enter fullscreen mode Exit fullscreen mode

Kesiti belirli bir elemanından başlayarak kesit[2:5], belirli bir elemanına kadar kesit[:5] veya belirli bir elemanından başlayarak sonuna kadar bölüp yeni değişkene atanabilirsiniz.

Kesit Tanımı ve Değer Atama

    t := []string{"g", "h", "i"}
Enter fullscreen mode Exit fullscreen mode

Kesitler tanımlanırken de değer ataması yapılabilir.

2 Boyutlu Kesit

    kesit2 := make([][]int, 3)
    for i := 0; i < 3; i++ {
        boyut := i + 1
        kesit2[i] = make([]int, boyut)
        for j := 0; j < boyut; j++ {
            kesit2[i][j] = i + j
        }
    }
Enter fullscreen mode Exit fullscreen mode

Kesit 2 boyutlu olarak oluşturulabilir. Yukarıdaki örnekte öncelikle kesit2 adıyla 2 boyutlu kesit oluşturulmaktadır. for döngüsü ile de kesit2'ye yeni kesitler ve onlara da yeni kesitler eklenerek 2. boyut elde edilmiş olur, Inception :)

💖 💪 🙅 🚩
yakar
Aydın Yakar

Posted on October 7, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related