مرکزی مواد پر جائیں
ماڈیول 2 · سبق 3 از 5کورس میں 8/50~10 min
ماڈیول اسباق (3/5)

رینج کے لیے

for ... range مجموعوں پر تکرار کرنے کا محاوراتی طریقہ ہے: سلائسیں، صفیں، نقشے، تار اور چینلز۔ نحو تھوڑا سا بدل جاتا ہے۔ مجموعہ پر منحصر ہے، لیکن بنیادی پیٹرن ہمیشہ ایک جیسا ہوتا ہے: for key, value := range coll { ... }

سلائسوں اور صفوں پر رینج

انڈیکس اور قدر کی کاپی لوٹاتا ہے:

Go
nums := []int{10, 20, 30}
for i, v := range nums {
    fmt.Println(i, v)
}
// 0 10
// 1 20
// 2 30

اکثر دو میں سے ایک کافی ہوتا ہے:

Go
// solo indice
for i := range nums { _ = i }

// solo valore (ignora indice con _)
for _, v := range nums { _ = v }

نقشے پر رینج

کلید اور قدر لوٹاتا ہے:

Go
prices := map[string]int{"pane": 2, "latte": 3, "vino": 8}
for k, v := range prices {
    fmt.Println(k, v)
}

سٹرنگ پر رینج: رنز، بائٹس نہیں۔

for i, r := range s دہراتی ہے فی یونیکوڈ کوڈ پوائنٹ (رن)، فی نہیں بائٹ انڈیکس i رن کے آغاز کا بائٹ آفسیٹ ہے۔

Go
for i, r := range "èé" {
    fmt.Printf("%d %c (%U)\n", i, r, r)
}
// 0 è (U+00E8)
// 2 é (U+00E9)

فی بائٹ اعادہ کرنے کے لیے کلاسک انڈیکسنگ کا استعمال کریں:

Go
s := "ciao"
for i := 0; i < len(s); i++ {
    fmt.Println(s[i])  // byte (uint8)
}

ایک چینل پر رینج

چینل بند ہونے تک اعادہ ہوتا ہے:

Go
ch := make(chan int)
go func() {
    for i := 0; i < 3; i++ { ch <- i }
    close(ch)
}()
for v := range ch {
    fmt.Println(v)
}

ہم کنکرنسی ماڈیول میں مزید گہرائی میں جائیں گے۔

اسے آزمائیں

ورزش#go.m2.l3.e1
کوششیں: 0لوڈ ہو رہا ہے…

فار رینج کا استعمال کرتے ہوئے نمبر کے ہر عنصر کی انڈیکس اور قدر پرنٹ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#go.m2.l3.e2
کوششیں: 0لوڈ ہو رہا ہے…

انڈیکس کو نظر انداز کرنے والے نمبروں کی کل تمام اقدار کا مجموعہ۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

انڈیکس کو ضائع کرنے کے لیے `_` استعمال کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔

Quiz#go.m2.l3.e3
تیار

جب m ایک نقشہ ہوتا ہے تو `for k, v := range m` میں پہلا متغیر کس چیز کی نمائندگی کرتا ہے؟

Go
m := map[string]int{"a": 1, "b": 2}
for k, v := range m { fmt.Println(k, v) }
جواب کے اختیارات

Recap

  • for k, v := range coll واضح دائرہ کار کے ساتھ: _ کے ساتھ رد کریں جسے آپ استعمال نہیں کرتے ہیں۔
  • سلائس/سرنی: قیمت کی انڈیکس + کاپی۔ بدلنا، اشاریہ۔
  • نقشہ: کلید + قدر، آرڈر بے ترتیب ہر رن پر۔
  • اسٹرنگ: رینج کی تکرار فی رن (کوڈ پوائنٹ)، فی بائٹ نہیں۔
  • چینل: چینل کے کھلے ہونے پر اعادہ ہوتا ہے۔ close() کے ساتھ بند۔