گو لینگويج ميں ایرے

1.1: ایرے کی تعریف اور اعلان

ایرے ایک مضبوط سائز کی ترتیب ہے جس میں ایک ہی قسم کے عناصر ہوتے ہیں۔ گو بولی میں، ایرے کا لمبائی ایرے کی قسم کا حصہ مانا جاتا ہے۔ یہ یعنی کہ مختلف لمبائی کے ایرے کو مختلف قسم کے ایرے کے طور پر جاری ہے۔

ایرے کا تجوید کرنے کے لئے بنیادی سنٹیکس مندرجہ ذیل ہے:

var arr [n]T

یہاں، var متغیر کی تعریف کے لئے کلمہ ہے، arr ایرے کا نام ہے، n ایرے کی لمبائی کو ظاہر کرتا ہے، اور T ایرے میں عناصر کی قسم کو ظاہر کرتا ہے۔

مثال کے طور پر، 5 معدہ عددی اقسام کا ایرے تجوید کرنے کے لئے:

var myArray [5]int

اس مثال میں، myArray ایک ایرے ہے جس میں 5 معدہ عددی اقسام کی قسم کے عدد شامل ہوسکتے ہیں۔

1.2: ابتدائیت اور ایرے کا استعمال

ایرے کی ابتدائیت دائری ترتیب سے ہوسکتی ہے یا نشانوں کے ذریعے قیمتیں دینے سے۔ ایرے کی ابتدائیت کے لئے مختلف طریقے ہیں۔

سیدھی ابتدائیت

var myArray = [5]int{10, 20, 30, 40, 50}

اس میں کمپائلر کو عدد شامل ہونے کی بنا پر ایرے کی لمبائی حاصل کرنے کا امکان بھی ہے:

var myArray = [...]int{10, 20, 30, 40, 50}

یہاں، ... دیکھنے کو ملتا ہے کہ کمپائلر نے ایرے کی لمبائی کو حاصل کیا ہے۔

نشانوں کے ذریعے ابتدائیت

var myArray [5]int
myArray[0] = 10
myArray[1] = 20
// باقی عناصر کی ابتدائیت صفر ہے، کیونکہ int کی صفر قیمت ہے

ایرے کے ابتدائیت سے استفادہ بھی آسان ہوتا ہے، اور عناصر کو نشانوں کے ذریعے تک رسائی حاصل کی جا سکتی ہے:

fmt.Println(myArray[2]) // تیسرا عنصر تک رسائی حاصل کرنا

1.3: ایرے کا دورہ

ایرے کا دورہ کرنے کے دو عام طریقے ہیں: روایتی for لوپ استعمال کرنا اور range استعمال کرنا۔

روایتی for لوپ سے دورہ

for i := 0; i < len(myArray); i++ {
    fmt.Println(myArray[i])
}

range کا استعمال کرکے دورہ

for index, value := range myArray {
    fmt.Printf("انڈیکس: %d، قیمت: %d\n", index, value)
}

range کا استعمال کرنے کا فائدہ یہ ہے کہ یہ دو قیمتیں واپس کرتا ہے: فعلی انڈیکس کی مقامیت اور اس مقام پر قیمت۔

1.4: ایرے کی خصوصیات اور محدودیات

گو بولی میں، ایرے قیمتی اقسام ہیں، یعنی جب ایرے کو کسی فعل کے پیرامیٹر کے طور پر بھیجا جاتا ہے، تو ایرے کا کاپی بھیجا جاتا ہے۔ لہذا، اگر فعل کے اندر میں اصل ایرے کی ترتیب میں ترمیم کی ضرورت ہو تو عام طور پر اس میں خوانش یا ایرے کے پوائنٹر کا استعمال کیا جاتا ہے۔

2. گو بولی میں سلائس

2.1: سلائس کا تصور

گو بولی میں، ایک سلائس ایک ایرے کے اوپر سے ایک مستقل عنصر ہے۔ گو ایرے کا سائز غیر قابل تحریر ہے، جو کچھ مناظر کے انداز میں اس کے استعمال میں محدود ہوتا ہے۔ گو بولی میں سلائس ایک سست، جدید اور طاقتور انٹرفیس فراہم کرنے کے لئے ڈیزائن کی جاتی ہیں۔ سلائس خود میں ڈیٹا نہیں رکھتیں؛ بلکہ وہ صرف اس پیچیدے ایرے کے حوالے سے اشارے ہوتے ہیں۔ ان کی دوری نمائی ذاتی طور پر مندرجہ ذیل نقطوں سے مشہور ہوتی ہے:

  • ترنمی قدر: ایرے کے برخورد ہونے کی مانند بلکل، سلائس کی لمبائی غیر قابل تحریر ہے، جس کے ذریعے وہ خود بیخود بڑھائی یا کم کرا لی جاتی ہے۔
  • لچکداری: عناصر کو اس بندش میں آسانی سے شامل کیا جا سکتا ہے جس پر ٹھوس کی گئی ہو۔
  • حوالہ قسم: سلائس ایرے کے تحت عناصر کا حوالہ لینے کا طریقہ ہوتا ہے، بغیر اس بات کے کہ ڈیٹا کی کاپیاں بنائیں جائیں۔

2.2: سلائس کی تعریف اور ابتدائیت

سلائس کی تعریف کے سنٹیکس میں ایرے کی تعریف کے سنٹیکس کی طرح ہے، لیکن جب تعریف کرتے وقت عناصر کی تعداد کو ظاہر کرنے کی ضرورت نہیں ہوتی۔ مثال کے طور پر، عددی اقسام کی سلائس کی تعریف درج ذیل ہے:

var slice []int

آپ ایک سلائس کی تعریف کو سلائس لٹرل کا استعمال کرکے شروع کرسکتے ہیں:

slice := []int{1, 2, 3}

آپ اس کو make فنکشن کا استعمال کرکے ایک سلائس کی تعریف کرسکتے ہیں، جو آپ کو سلائس کی لمبائی اور قابلیت مخصوص کرنے کی اجازت دیتا ہے:

slice := make([]int, 5)  // 5 کی لمبائی اور قابلیت کے ساتھ عددی اقسام کی سلائس بنایں

اگر زیادہ قابلیت کی ضرورت ہو تو، تو حوالہ قابلیت کو ایک تیسرا پیرامیٹر کے طور پر make فنکشن کو دے سکتے ہیں:

slice := make([]int, 5, 10)  // 5 کی لمبائی اور 10 کی قابلیت کے ساتھ عددی اقسام کی سلائس بنایں

2.3 سلائس اور ایرے کے درمیان تعلق

سلائس کو ایرے کے حصے کو مختص کرکے بنایا جا سکتا ہے، جو اس حصے کا حوالہ بناتا ہے۔ مثال کے طور پر، مندرجہ ذیل ایرے دیا گیا ہے:

array := [5]int{10, 20, 30, 40, 50}

ہم سلائس مندرجہ ذیل طریقے سے بنا سکتے ہیں:

slice := array[1:4]

اس سلائس slice کا ایرے array کے عناصر کا حوالہ 1 انڈیکس سے 3 انڈیکس تک رکھتا ہے (انڈیکس 1 سے شروع ہوکر انڈیکس 4 سے قبل تک).

اس بات کا اہم حوالہ رکھنا ہے کہ سلائس فی الحال ایرے کی قیمتوں کو نہیں کاپی کرتی ہے؛ بلکہ یہ صرف اصل ایرے کے ایک متواتر حصے کا حوالہ ہوتی ہے۔ لہذا، سلائس میں ترمیمات اصل ایرے پر بھی اثرانداز ہوں گی، اور الٹا بھی۔ اس رفرنسی تعلق کو سمجھنا سلائس کا مؤثر استعمال کرنے کے لئے نہایت اہم ہے۔

2.4 سلائس پر بنیادی عمل

2.4.1 انڈیکسنگ

سلائس اپنے عناصر تک رسائی انڈیکسوں کا استعمال کرکے حاصل کرتی ہیں، جو کہ ایرے کی طرح ہے، ہمیشہ 0 سے شروع ہوتے ہیں۔ مثال کے طور پر:

slice := []int{10, 20, 30, 40}
// پہلے اور تیسرے عناصر تک رسائی حاصل کرنا
fmt.Println(slice[0], slice[2])

2.4.2 لمبائی اور کیپیسٹی

سلائس کی دو خصوصیات ہوتی ہیں: لمبائی (len) اور کیپیسٹی (cap)۔ لمبائی سلائس میں عناصر کی تعداد ہوتی ہے، اور کیپیسٹی سلائس کے پہلے عنصر سے آخری ایرے تک عناصر کی تعداد ہوتی ہے۔

slice := []int{10, 20, 30, 40}
// سلائس کی لمبائی اور کیپیسٹی کو چھاپنا
fmt.Println(len(slice), cap(slice))

2.4.3 عناصر شامل کرنا

append فنکشن کا استعمال سلائس میں عناصر شامل کرنے کے لئے ہوتا ہے۔ جب سلائس کی کیپیسٹی نئے عناصر کو ٹھوس کرنے کے قابل نہ ہو تو، append فنکشن خود بخود سلائس کی کیپیسٹی بڑھا دیتا ہے۔

slice := []int{10, 20, 30}
// ایک عنصر شامل کرنا
slice = append(slice, 40)
// متعدد عناصر شامل کرنا
slice = append(slice, 50, 60)
fmt.Println(slice)

اس بات کا اہم حوالہ رکھنا ہے کہ append استعمال کرتے وقت عناصر شامل کرنے پر، یہ نیا سلائس واپس بھی کر سکتا ہے۔ اگر اصل ایرے کی کیپیسٹی ناکافی ہوتی ہے، تو append عمل سے سلائس کو نئے اور زیادہ بڑے ایرے کا حوالہ دینا پڑ سکتا ہے۔

2.5 سلائس کا توسیع اور کاپی

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

2.5.1 copy فنکشن کا استعمال

مندرجہ ذیل کوڈ وضاحت دیتا ہے کہ کیسے copy کا استعمال کیا جاتا ہے:

src := []int{1, 2, 3}
dst := make([]int, 3)
// عناصر کو ہدف سلائس میں کاپی کرنا
copied := copy(dst, src)
fmt.Println(dst, copied)

copy فنکشن واپسی میں کیے گئے عناصر کی تعداد دیتا ہے، اور یہ نہ تو ہدف سلائس کی لمبائی سے بڑھے گا اور نہ ہی ماخذ سلائس کی لمبائی سے، جو بھی چھوٹا ہو۔

2.5.2 غور کرنے والے امور

copy فنکشن کا استعمال کرتے وقت، اگر نئے عناصر کو کاپی کرنے کی کوشش کری جائے لیکن ہدف سلائس میں کافی جگہ نہ ہو تو، صرف وہ عناصر کاپی ہوں گے جو ہدف سلائس کا حوالہ دے سکتی ہو۔

2.6 دو بعدی سلائس

دو بعدی سلائس وہ سلائس ہیں جو متعدد سلائس کو شامل کرتی ہیں۔ یہ ایک دو بعدی ایرے کی طرح ہوتی ہیں، لیکن سلائس کی متغیر لمبائی کی وجہ سے، دو بعدی سلائس زیادہ فلیکسیبل ہوتی ہیں۔

2.6.1 دو بعدی سلائس بنانا

دو بعدی سلائس بنانا (سلائس کا سلائس):

twoD := make([][]int, 3)
for i := 0; i < 3; i++ {
    twoD[i] = make([]int, 3)
    for j := 0; j < 3; j++ {
        twoD[i][j] = i + j
    }
}
fmt.Println("دو بعدی سلائس: ", twoD)

2.6.2 دو بعدی سلائس کا استعمال کرنا

دو بعدی سلائس کا استعمال ایک بعدی سلائس کے استعمال کی طرح ہوتا ہے، جسے انڈیکس کی مدد سے حاصل کیا جاتا ہے:

// دو بعدی سلائس کے عناصر تک رسائی حاصل کرنا
val := twoD[1][2]
fmt.Println(val)

3 ایرے اور سلائس کے اطلاقات کا موازنہ

3.1 استعمال کی مواقع کی تفصیلات کا موازنہ

Go میں ترتیب کے عناصر کے مجموعوں کو ذخیرہ کرنے کا ابتدائی طریقے 'Arrays' اور 'Slices' دونوں ہیں، مگر ان کے استعمال کی مواقع میں فرق ہوتا ہے۔

Arrays:

  • ایک ایکس ایسی چیز کے لیے ایک ٹھوس مقدار کا وسیع ہونے والا اکائی ہر ایک ایکس کے ساتھ ایک بناوٹ ہوتی ہے، جس سے پرانے اور مضمونہ اردون onے ترتیب یافتہ استعمال

  • JB aHS CONFUSED BJSDF

  • CNHCXH MUFM

Slices:

  • ان kiEABFo;uiq
  • ZyiLKF EQMLJFASN

گو کی سٹیٹک یاداشت کے انتظامی نقائص کو دوبارہ کرنا، جبکہ Slices زیادہ لچکدار ہیں؛ جو ان کو ایک کم علیحدہ انداز میں استعمال کرنے کا فایاز بناتا ہے۔