Arrays - Diziler
Dizi Kavramı
Dizi birden çok elemanın bir arada olduğu elemanlar kümesi olarak ifade edilir.
GO programlama dilinde diziler, aynı veri türüne ait elemanlar kümesidir. Yani string veri türündeki ifadelerin bir araya gelmesinden oluşan bir küme dizi string türünde bir dizidir. Aynı şekilde int , float , bool ifadeleri de birer dizi oluşturabilir.
DİKKAT: GO programlama dili farklı veri tiplerinin bir arada olduğu dizilere izin vermez.
Dizilerin Tanımlanması
Dizi tanımlanması sırasında iki farklı metod vardır:
- Öğe sayısı belirterek dizi tanımlama
- Öğe Sayısı belirtmeden dizi tanımlama
// oge sayısı belirterek dizi tanımlama
var arr = [3]string{}
var arr=[3]string{} ifadesinde bu dizi maksimum 3 ogeden olusacaktır diye oge sayisi belirttik. Dorduncu bir deger girilmeye calisildiginda dizi hata dondurecektir.
// oge sayisi belirtmeden dizi tanımlama
var arr2 = [...]int{111,209,301,498}
var arr2 = [...]int{111,209,301,498} ifadesinde ise girilecek oge miktarı önceden belirtilmemistir ve kullanıcıya bırakılmıştır. Ust limit yoktur.
Burada 3 elemanı olan ve string türünde veriler barındıracak bir dizi tanımladınız. Ama dizimizin henüz hiç elemanı yok.
Dizilerin Elemanları ve Dizi Indeksleri
Üç elemandan oluşan bir dizi tanımlayalım ve içine değerlerimizi atayalım.
func main(){
var firstArray = [4]string{"Edirne", "Kırklareli", "Tekirdağ", "Çanakkale"}
// array
fmt.Println(firstArray)
// zero indexed item
fmt.Println(firstArray[0])
// second indexed item
fmt.Println(firstArray[2])
fmt.Printf("Second indexed item in array:%s\n", firstArray[2])
}
Kod satırı çalıştırıldığında şöyle bir çıktı elde edeceksiniz:
[Edirne Kırklareli Tekirdağ Çanakkale]
Edirne
Tekirdağ
Second indexed item in array:Tekirdağ
Dizinin kendisi, sıfır index numaralı değeri, 2 index numaralı değeri ekranda görüntülenir.
HATIRLATMA: Programlama dillerinde, dizi elemanları sıfırdan başlayarak index değeri alırlar. Yani
adizisinin ilk değeria[0]değeridir.
Dizinin Öğelerini Değiştirmek
Dizi içinde bir değere yeni bir atama yapmak istediğimizde o değerin indeks numarasını belirterek doğrudan atama yapabiliriz. Dikkat etmemiz gereken en önemli konu dizi indeksinin 0 değeri ile başlamasıdır. Yani 4 elemanlı bir dizinin son elemanının dizi numarası indekslememiz 0 değerinden başladığı için 3 olacaktır.
package main
import "fmt"
func main() {
sehirler := [...]string{
"Kırklareli",
"Edirne",
"Çanakkale",
"Bursa",
"Tekirdağ",
"İstanbul",
"Kocaeli",
}
// dizinin boyutu
fmt.Println(len(sehirler))
sehirler[6] = "Paris"
fmt.Printf("sehirler 6 indexed item is : %s\n", sehirler[6])
}
Kodu çalıştırdığımızda ekranda şu şekilde bir çıktı alacaksınız:
7
sehirler 6 indexed item is : Paris
Yedi elemandan oluşan bir listemiz var ve indeks numarası 6 olan öğe paris olarak değiştirildi.
Out of Bounds (Sınırlama Dışında Değer) Hatası
Peki 3 elemanla sınırlanmış bir diziye bir tane dördüncü eleman atarsak ne olur? Kodumuzda dizi değerlerini yazdığımız kısma aşağıdaki kodu ilave edip tekrar çalıştıralım.
dizi[3] = "Amasya"
Kodumuzun son hali:
package main
import (
"fmt"
)
func main(){
var dizi = [3]string{}
dizi[0] = "Edirne"
dizi[1] = "Bursa"
dizi[2] = "Manisa"
dizi[3] = "Amasya" // yeni eklediğimiz değer
//dizinin goruntulenmesi
fmt.Println(dizi)
// dizinin birinci degeri
fmt.Println(dizi[1])
}
Kodu çalıştırdığımızda aşağıdaki hatayı alacaksınız.
invalid argument: index 3 out of bounds [0:3]
out of bounds hatası dizinin sınırlandığı değer sayısından fazla öğe girildiğini belirtir.
Siz dize tanımlarken 3 değerden oluşan bir dize tanımlayacağınızı belirttiniz fakat şimdi dördüncü elemanı tanımlıyorsunuz. Ya bu kuralı belirtmeyin açık uçlu bir dize tanımlayın ya da sayıyı arttırın.
Dizilerde Varsayılan Değerler
Bir diziye ait değerlere atama yapılmadığında GO bu atanma yapılmayan değerler için varsayılanlar atar. Siz eğer bu değerleri unuttuysanız ya da bilerek vermediyseniz GO buraya uygun değer atamasını kendiliğinden sağlar.
Bu varsayılanlar :
intvefloatdeğerler için varsayılan : 0stringifadeler için varsayılan : null (boşluk karakteri)boolifadeler icin varsayilan : false
değerleridir.
package main
func main() {
arr1 := [5]int{} //not initialized
arr2 := [5]int{1, 2} //partially initialized
arr3 := [5]int{1, 2, 3, 4, 5} //fully initialized
fmt.Println(arr1)
fmt.Println(arr2)
fmt.Println(arr3)
city1 := [3]string{}
city2 := [3]string{"Bursa", "İstanbul"}
city3 := [3]string{"Bursa", "İstanbul", "Edirne"}
fmt.Println(city1)
fmt.Println(city2)
fmt.Println(city3)
derece := [3]float64{0: 22.4, 2: 11.3}
fmt.Println(derece)
yoklama := [4]bool{true, false, 3: false}
fmt.Println(yoklama)
}
Kodu çalıştırdığımızda ekran çıktımız aşağıdaki gibi olacaktır:
[0 0 0 0 0]
[1 2 0 0 0]
[1 2 3 4 5]
-----------------------------
[ ]
[Bursa İstanbul ]
[Bursa İstanbul Edirne]
-----------------------------
[22.4 0 11.3]
-----------------------------
[true false false false]
Burada yeni bir ifade görüyoruz o da derece := [3]float64{0: 22.4, 2: 11.3} ifadesindeki 0:22.4 yazımıdır. Bu yazım sıfır numaralı indekse 22.4 ifadesinin ata anlamına gelir.
Çok Boyutlu Diziler - MultiDimensional Arrays
Peki bizim diziler hep tek şekilde mi olacak hiç dizi değerleri içerisinde birden çok dizi olan matrisleri kullanamayacak mıyız? Bu soruya da yanıt verelim.
diziAdı := [dimension1][dimension2][dimension3][dimension...]string
Bir çok boyutlu dizi tanımlarken boyut miktarı kadar [] ifadesi ve sonrasında string, int,float, bool gibi veri tipleri bildirilerek tanımlama yapılır.
hayvanlar := [3][2]string{
{"aslan", "kaplan"},
{"kedi", "köpek"},
{"güvercin", "kartal"}, // sondaki virgül gereklidir
}
3 satır ve 2 sütundan oluşan bir dize tanımladık. Dizimiz 2 boyutludur. Eğer başka bir köşeli parantez ve değer daha eklersek dizimiz 3 boyutlu bir dizi olacaktır.
DİKKAT:
{"güvercin", "kartal"},ifadesinde yer alan sondaki virgül,gereklidir.Alt alta satır yazarken en son satır virgül ile bitirilir. GO yazım kuralları gereğince dizi tanımlaması sırasında birden çok satır kullanılırsa virgül ile bitirilmelidir.
Şimdi dizimizi ekrana yazdıralım:
package main
import "fmt"
func main(){
hayvanlar := [3][2]string{
{"aslan", "kaplan"},
{"kedi", "köpek"},
{"güvercin", "kartal"}, // sondaki virgül gereklidir
}
// dizi
fmt.Println(hayvanlar)
// dizinin ikinci elemanının birinci degeri
fmt.Println(hayvanlar[2][1])
}
Ekran çıktımız:
[[aslan kaplan] [kedi köpek] [güvercin kartal]]
kartal
şeklinde olacaktır.