ماڈیول اسباق (3/5)
رینج کے لیے
for ... range مجموعوں پر تکرار کرنے کا محاوراتی طریقہ ہے:
سلائسیں، صفیں، نقشے، تار اور چینلز۔ نحو تھوڑا سا بدل جاتا ہے۔
مجموعہ پر منحصر ہے، لیکن بنیادی پیٹرن ہمیشہ ایک جیسا ہوتا ہے:
for key, value := range coll { ... }
سلائسوں اور صفوں پر رینج
انڈیکس اور قدر کی کاپی لوٹاتا ہے:
nums := []int{10, 20, 30}
for i, v := range nums {
fmt.Println(i, v)
}
// 0 10
// 1 20
// 2 30اکثر دو میں سے ایک کافی ہوتا ہے:
// solo indice
for i := range nums { _ = i }
// solo valore (ignora indice con _)
for _, v := range nums { _ = v }نقشے پر رینج
کلید اور قدر لوٹاتا ہے:
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 رن کے آغاز کا بائٹ آفسیٹ ہے۔
for i, r := range "èé" {
fmt.Printf("%d %c (%U)\n", i, r, r)
}
// 0 è (U+00E8)
// 2 é (U+00E9)فی بائٹ اعادہ کرنے کے لیے کلاسک انڈیکسنگ کا استعمال کریں:
s := "ciao"
for i := 0; i < len(s); i++ {
fmt.Println(s[i]) // byte (uint8)
}ایک چینل پر رینج
چینل بند ہونے تک اعادہ ہوتا ہے:
ch := make(chan int)
go func() {
for i := 0; i < 3; i++ { ch <- i }
close(ch)
}()
for v := range ch {
fmt.Println(v)
}ہم کنکرنسی ماڈیول میں مزید گہرائی میں جائیں گے۔
اسے آزمائیں
فار رینج کا استعمال کرتے ہوئے نمبر کے ہر عنصر کی انڈیکس اور قدر پرنٹ کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
انڈیکس کو نظر انداز کرنے والے نمبروں کی کل تمام اقدار کا مجموعہ۔
اشارہ دکھائیں۔
انڈیکس کو ضائع کرنے کے لیے `_` استعمال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
جب m ایک نقشہ ہوتا ہے تو `for k, v := range m` میں پہلا متغیر کس چیز کی نمائندگی کرتا ہے؟
m := map[string]int{"a": 1, "b": 2}
for k, v := range m { fmt.Println(k, v) }Recap
for k, v := range collواضح دائرہ کار کے ساتھ:_کے ساتھ رد کریں جسے آپ استعمال نہیں کرتے ہیں۔- سلائس/سرنی: قیمت کی انڈیکس + کاپی۔ بدلنا، اشاریہ۔
- نقشہ: کلید + قدر، آرڈر بے ترتیب ہر رن پر۔
- اسٹرنگ: رینج کی تکرار فی رن (کوڈ پوائنٹ)، فی بائٹ نہیں۔
- چینل: چینل کے کھلے ہونے پر اعادہ ہوتا ہے۔
close()کے ساتھ بند۔