range ile iterasyon
- Go kursu
- Başlangıç
- Ders 37/90
- 4 dk
range ile slice ve map üzerinde döngüyü öğrenirsin.
range ile iterasyon
range dilim, dizi, map, string ve kanallar üzerinde gezinir. Dilimlerde her turda dizin ve değer verir:
meyveler := []string{"elma", "armut", "kiraz"}
for i, m := range meyveler {
fmt.Println(i, m)
}
for _, m := range meyveler { // yalnızca değer
fmt.Println(m)
}Go 1.22'den itibaren for i := range 5 ile 0'dan 4'e kadar da sayılabilir.
Map ve string üzerinde range
Map'te range anahtar ve değer verir; sıra rastgeledir ve her çalıştırmada değişebilir. String'de ise bayt dizini ve rune verir:
stok := map[string]int{"kalem": 3, "defter": 5}
for ad, adet := range stok {
fmt.Println(ad, adet)
}
for i, r := range "çay" {
fmt.Println(i, string(r)) // 0 ç, 2 a, 3 y
}Sıralı çıktı gerekiyorsa map anahtarları önce bir dilime alınıp sıralanır.
Uygulama Dilimi ikiye katla
s := []int{1, 2, 3} tanımla. for i := range s döngüsüyle her elemanı yerinde iki katına çıkar ve dilimi yazdı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}
for i := range s {
s[i] *= 2
}
fmt.Println(s)
}Beklenen çıktı
[2 4 6]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>for _, v := range s { v *= 2 }</code> dilimi değiştirir mi?
- Evet, tüm elemanlar iki katına çıkar
- Yalnızca ilk eleman değişir
- Derlenmez
- Hayır; v elemanın kopyasıdır Doğru cevap
Açıklama: Dilimi değiştirmek için dizinle yazılır: for i := range s { s[i] *= 2 }.
2 Dizini atla
for ____, m := range meyveler {
fmt.Println(m)
}
for _, m := range meyveler {
fmt.Println(m)
}
Açıklama: _ kullanılmayan dizini yok sayar.
3 range hedefi
| Kavram | Anlamı |
|---|---|
[]string |
dizin, değer |
map[K]V |
anahtar, değer |
string |
bayt dizini, rune |
range 5 |
0..4 |