Arrays এবং Slices (অ্যারে এবং স্লাইস)

গো প্রোগ্রামিং (Go Programming) - Computer Programming

304

Go-তে Arrays এবং Slices (অ্যারে এবং স্লাইস)

Go প্রোগ্রামিং ভাষায় Arrays এবং Slices দুটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার, যা একই ধরনের অনেক উপাদান (elements) ধারণ করতে ব্যবহৃত হয়। তবে, তাদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্যও রয়েছে। চলুন, এগুলোর ব্যবহার এবং পার্থক্য দেখে নিই।


১. Arrays (অ্যারে)

Arrays হল একটি ফিক্সড আকারের ডেটা স্ট্রাকচার যেখানে এক ধরনের ডেটা একাধিক উপাদান হিসাবে সন্নিবেশিত হয়। অ্যারের সাইজ একবার ঘোষণা করার পর পরিবর্তন করা যায় না।

১.১ Array ডিফাইনেশন

Go-তে অ্যারে ডিফাইন করার জন্য সঠিক টাইপ এবং সাইজ উল্লেখ করতে হয়।

package main

import "fmt"

func main() {
    // অ্যারে ডিফাইন করা
    var arr [5]int

    // অ্যারে এর মান সেট করা
    arr[0] = 10
    arr[1] = 20
    arr[2] = 30
    arr[3] = 40
    arr[4] = 50

    // অ্যারে এর উপাদান প্রিন্ট করা
    fmt.Println(arr)
}

এখানে arr একটি অ্যারে যা ৫টি পূর্ণসংখ্যা (int) ধারণ করে এবং মানগুলি দেওয়া হয়েছে।

আউটপুট:

[10 20 30 40 50]

১.২ Array Initialization

আপনি অ্যারে তৈরি করার সময় সরাসরি মানও প্রদান করতে পারেন:

package main

import "fmt"

func main() {
    // অ্যারে ইনিশিয়ালাইজেশন
    arr := [3]string{"Apple", "Banana", "Orange"}

    fmt.Println(arr)
}

এখানে, অ্যারেটি string টাইপের এবং ৩টি উপাদান ধারণ করছে।

আউটপুট:

[Apple Banana Orange]

১.৩ Array Length (আকৃতির দৈর্ঘ্য)

Go-তে অ্যারের দৈর্ঘ্য নির্ধারণ করার জন্য len() ফাংশন ব্যবহার করা হয়।

fmt.Println(len(arr)) // আউটপুট: 3

এখানে, arr এর দৈর্ঘ্য ৩ হওয়ায় আউটপুট হবে 3

১.৪ Array Limitations

  • অ্যারের সাইজ নির্ধারণ করার পরে সেটি পরিবর্তন করা যায় না।
  • অ্যারে এর মানগুলি value type হিসেবে কাজ করে, যার মানে হল যে অ্যারে এক জায়গায় পরিবর্তিত হলে, অন্যান্য জায়গায় এর কপি আলাদা থাকবে।

২. Slices (স্লাইস)

Slices হল অ্যারের এক প্রকার ডাইনামিক রূপ, যা অ্যারের চেয়ে বেশি সুবিধাজনক। স্লাইসের আকার পরিবর্তনযোগ্য এবং এটি অ্যারের উপাদানগুলির একটি ভিউ হিসাবে কাজ করে। স্লাইসের সাথে আপনি সহজেই নতুন উপাদান যুক্ত করতে পারেন এবং সেগুলির আকার পরিবর্তন করতে পারেন।

২.১ Slice ডিফাইনেশন

স্লাইসের জন্য কোনও ফিক্সড সাইজ উল্লেখ করার প্রয়োজন হয় না। স্লাইসটি একটি অ্যারের উপাদানগুলির একটি সাব-সেট (subset) হিসেবে কাজ করতে পারে।

package main

import "fmt"

func main() {
    // স্লাইস ডিফাইন করা
    var slice []int

    // স্লাইসে মান অ্যাড করা
    slice = append(slice, 10)
    slice = append(slice, 20)
    slice = append(slice, 30)

    // স্লাইসের উপাদান প্রিন্ট করা
    fmt.Println(slice)
}

এখানে slice একটি স্লাইস যা append() ফাংশন ব্যবহার করে মান যুক্ত করা হয়েছে।

আউটপুট:

[10 20 30]

২.২ Slice Initialization

স্লাইসটি সরাসরি ইনিশিয়ালাইজও করা যেতে পারে:

package main

import "fmt"

func main() {
    // স্লাইস ইনিশিয়ালাইজেশন
    slice := []string{"Apple", "Banana", "Orange"}

    fmt.Println(slice)
}

এখানে slice একটি স্লাইস যা তিনটি স্ট্রিং উপাদান ধারণ করছে।

আউটপুট:

[Apple Banana Orange]

২.৩ Slice Length

Go-তে স্লাইসের দৈর্ঘ্য এবং ক্যাপাসিটি নির্ধারণ করতে len() এবং cap() ফাংশন ব্যবহার করা হয়।

fmt.Println(len(slice)) // আউটপুট: 3
fmt.Println(cap(slice)) // আউটপুট: 3 (যেহেতু স্লাইসটি পুরোপুরি ইনিশিয়ালাইজ করা হয়েছে)

len() ফাংশন স্লাইসের দৈর্ঘ্য এবং cap() ফাংশন স্লাইসের ক্যাপাসিটি প্রদান করে।

২.৪ Slice Capacity Expansion

স্লাইসটি ডাইনামিকভাবে তার আকার পরিবর্তন করতে পারে এবং নতুন উপাদান অ্যাড করার সময় তার ক্যাপাসিটি বৃদ্ধি পায়। স্লাইসের ক্যাপাসিটি বড় হওয়ার ফলে, স্লাইসটির মেমরি ব্লক নতুনভাবে রিসাইজ করা হয়।


৩. Arrays এবং Slices এর মধ্যে পার্থক্য

বৈশিষ্ট্যArrays (অ্যারে)Slices (স্লাইস)
সাইজফিক্সড সাইজডাইনামিক সাইজ
মানValue type (কপি হয়)Reference type (অ্যারেতে পরিবর্তন করলে স্লাইসও পরিবর্তিত হয়)
কনফিগারেশনসাইজের ঘোষণা প্রয়োজনসাইজ নির্দিষ্ট করার প্রয়োজন নেই
ফাংশনে পাস করাঅ্যারে একটি কপি পাস হয়স্লাইস পয়েন্টার হিসেবে পাস হয়

৪. Slices এবং Arrays এর সাথে একসাথে কাজ করা

আপনি যখন একটি অ্যারের সাথে স্লাইস ব্যবহার করেন, তখন স্লাইসটি অ্যারের উপাদানগুলির একটি সাবসেট হিসেবে কাজ করে। আপনি অ্যারের প্রথম কিছু উপাদান একটি স্লাইসে কপি করতে পারেন।

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    
    // অ্যারে থেকে স্লাইস তৈরি করা
    slice := arr[1:4] // অ্যারের ইনডেক্স 1 থেকে 3 পর্যন্ত স্লাইস করা

    fmt.Println(slice) // আউটপুট: [2 3 4]
}

এখানে, arr[1:4] দ্বারা অ্যারের প্রথম থেকে তৃতীয় উপাদান স্লাইসে কপি করা হয়েছে।


সারসংক্ষেপ

  • Arrays: অ্যারে হল একটি ফিক্সড সাইজের ডেটা স্ট্রাকচার যা এক ধরনের ডেটা ধারণ করে। অ্যারের সাইজ একবার ঘোষণা করার পর পরিবর্তন করা যায় না।
  • Slices: স্লাইস হল একটি ডাইনামিক ডেটা স্ট্রাকচার, যার আকার পরিবর্তনযোগ্য। এটি অ্যারের উপাদানগুলির একটি সাবসেট হিসেবে কাজ করে এবং ফাংশন ব্যবহারে সহজেই উপাদান যোগ করা যায়।
  • Slices vs Arrays: স্লাইসের তুলনায় অ্যারে কম নমনীয়, কারণ স্লাইসের আকার সহজে পরিবর্তন করা যায় এবং এটি বেশি কার্যকরী।

Go-তে Arrays এবং Slices ব্যবহার করে আপনি সহজে ডেটার গ্রুপিং এবং ম্যানিপুলেশন করতে পারবেন, এবং স্লাইস ব্যবহার করলেই আপনার প্রোগ্রামিং বেশি কার্যকরী এবং মেমরি দক্ষ হবে।

Content added By

Go-তে Arrays এর ডিক্লারেশন এবং Initialization

১. Arrays (এরে)

Go প্রোগ্রামিং ভাষায়, Array একটি ডেটা স্ট্রাকচার যা একই ধরনের উপাদান বা ডেটা আইটেমগুলির একটি নির্দিষ্ট আকারের সংগ্রহ। এটি একটি ফিক্সড সাইজের (অস্থির আকারের) ডেটা স্ট্রাকচার, অর্থাৎ একবার একটি array এর আকার নির্ধারণ করা হলে, তার সাইজ পরিবর্তন করা যায় না।


২. Array ডিক্লারেশন

Go-তে array ডিক্লেয়ার করার জন্য দুটি প্রধান উপায় রয়েছে:

  1. ফিক্সড আকারের array ডিক্লেয়ার করা
  2. ইনিশিয়ালাইজড array ডিক্লেয়ার করা

২.১ Array ডিক্লারেশন সিনট্যাক্স

Array ডিক্লেয়ার করার সাধারণ সিনট্যাক্স হলো:

var arrayName [size]Type

এখানে:

  • arrayName: array এর নাম
  • size: array এর আকার (এটি ফিক্সড থাকতে হবে)
  • Type: array এর উপাদানগুলির টাইপ (যেমন: int, string, float64)

২.২ Array ডিক্লেয়ার করার উদাহরণ

package main

import "fmt"

func main() {
    // একটি ইন্টিজার টাইপের array ডিক্লেয়ার করা
    var numbers [5]int

    // array এর মান সেট করা
    numbers[0] = 10
    numbers[1] = 20
    numbers[2] = 30
    numbers[3] = 40
    numbers[4] = 50

    // array প্রিন্ট করা
    fmt.Println(numbers)  // আউটপুট: [10 20 30 40 50]
}

এখানে, numbers নামের একটি int টাইপের array ডিক্লেয়ার করা হয়েছে যার আকার ৫। এরপর numbers array এর প্রতিটি উপাদানে মান সেট করা হয়েছে এবং এটি আউটপুট করা হয়েছে।


৩. Array Initialization (ইনিশিয়ালাইজেশন)

Go-তে array ইনিশিয়ালাইজ করার জন্য আপনি নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করতে পারেন:

  1. Manually Initialization (ম্যানুয়ালি ইনিশিয়ালাইজ)
  2. Implicit Initialization (ইমপ্লিসিট ইনিশিয়ালাইজ)

৩.১ Manually Array Initialization (ম্যানুয়ালি ইনিশিয়ালাইজ করা)

আপনি array এর মান সরাসরি ডিক্লেয়ারেশনের সময় সেট করতে পারেন।

package main

import "fmt"

func main() {
    // Manually Initialization (ম্যানুয়ালি ইনিশিয়ালাইজ)
    var numbers = [5]int{10, 20, 30, 40, 50}

    // array প্রিন্ট করা
    fmt.Println(numbers)  // আউটপুট: [10 20 30 40 50]
}

এখানে, numbers array-কে সরাসরি ৫টি ইন্টিজার মান দিয়ে ইনিশিয়ালাইজ করা হয়েছে।

৩.২ Implicit Array Initialization (ইমপ্লিসিট ইনিশিয়ালাইজ করা)

Go তে, আপনি implicit initialization ব্যবহার করে array ইনিশিয়ালাইজ করতে পারেন, যেখানে array এর সাইজ স্বয়ংক্রিয়ভাবে গণনা করা হয়।

package main

import "fmt"

func main() {
    // Implicit Initialization (ইমপ্লিসিট ইনিশিয়ালাইজ)
    numbers := [...]int{10, 20, 30, 40, 50}

    // array প্রিন্ট করা
    fmt.Println(numbers)  // আউটপুট: [10 20 30 40 50]
}

এখানে, [...] দ্বারা Go কম্পাইলার numbers array এর সাইজ নিজে থেকে নির্ধারণ করবে (যেহেতু ৫টি উপাদান দেওয়া হয়েছে, সাইজ হবে ৫)।

৩.৩ Partial Initialization (আংশিক ইনিশিয়ালাইজ করা)

আপনি array এর কিছু উপাদানও ইনিশিয়ালাইজ করতে পারেন এবং বাকী উপাদানগুলির জন্য ডিফল্ট মান পাবেন (যেমন: 0 for int, "" for string)।

package main

import "fmt"

func main() {
    // Partial Initialization (আংশিক ইনিশিয়ালাইজ)
    numbers := [5]int{10, 20}

    // array প্রিন্ট করা
    fmt.Println(numbers)  // আউটপুট: [10 20 0 0 0]
}

এখানে, numbers array এর প্রথম দুটি মান ১০ এবং ২০ দিয়ে ইনিশিয়ালাইজ করা হয়েছে, বাকী তিনটি উপাদান ডিফল্ট মানে থাকবে (যেহেতু array টাইপ int, তাদের মান হবে 0)।


৪. Array Length

Go-তে array-এর দৈর্ঘ্য (Length) len() ফাংশন দিয়ে বের করা হয়। এটি array এর উপাদানের সংখ্যা প্রদান করে।

package main

import "fmt"

func main() {
    numbers := [5]int{10, 20, 30, 40, 50}
    fmt.Println("Length of array:", len(numbers))  // আউটপুট: 5
}

এখানে, len(numbers) array numbers এর দৈর্ঘ্য ৫ প্রদান করবে।


৫. Multi-dimensional Arrays (মাল্টি-ডাইমেনশনাল অ্যারে)

Go-তে একাধিক মাত্রার (Multi-dimensional) array তৈরি করা সম্ভব। এটি একাধিক array কে একত্রিত করে একটি ২D বা ৩D array তৈরি করে।

৫.১ ২D Array (টেবিল আকারের অ্যারে)

package main

import "fmt"

func main() {
    // 2D Array ইনিশিয়ালাইজ করা
    var matrix [2][3]int = [2][3]int{
        {1, 2, 3},
        {4, 5, 6},
    }

    // 2D Array প্রিন্ট করা
    fmt.Println(matrix)  // আউটপুট: [[1 2 3] [4 5 6]]
}

এখানে, matrix একটি ২D array যা দুটি row এবং তিনটি column ধারণ করে।


সারসংক্ষেপ

  • Array ডিক্লারেশন: Go-তে array ডিক্লেয়ার করার সময় তার আকার এবং টাইপ অবশ্যই নির্ধারণ করতে হয়।
  • Array Initialization: Array ইনিশিয়ালাইজ করার জন্য আপনি ম্যানুয়ালি, ইমপ্লিসিটলি অথবা আংশিকভাবে ইনিশিয়ালাইজ করতে পারেন।
  • Length of Array: len() ফাংশন ব্যবহার করে array এর দৈর্ঘ্য পাওয়া যায়।
  • Multi-dimensional Arrays: Go-তে একাধিক মাত্রার array (যেমন ২D বা ৩D) তৈরি করা যায়, যা অ্যারেগুলোর সংমিশ্রণ হয়।

Go তে Arrays ব্যবহারের মাধ্যমে আপনি একই টাইপের ডেটাগুলিকে একটি সংগঠিত আকারে সংরক্ষণ করতে পারেন এবং ডেটার কার্যকরী ব্যবস্থাপনা করতে পারেন।

Content added By

Go-তে Arrays এবং তাদের বিভিন্ন অপারেশন

Go প্রোগ্রামিং ভাষায়, Arrays হল এক ধরনের ডেটা স্ট্রাকচার, যা একই ধরনের একাধিক ডেটাকে সংরক্ষণ করে। একটি Array-র আকার (size) নির্দিষ্ট থাকে এবং একবার সেট করা হলে এটি পরিবর্তন করা যায় না। Go-তে Arrays এর সাথে বিভিন্ন অপারেশন করা হয় যেমন ইনডেক্সিং, স্লাইসিং, লেন্থ চেকিং ইত্যাদি। এখানে আমরা Arrays এবং তাদের সাথে সম্পর্কিত বিভিন্ন অপারেশন নিয়ে আলোচনা করব।


১. Array ডিফাইনেশন

Go তে, Array ডিফাইন করার জন্য আপনাকে তার সাইজ এবং টাইপ উল্লেখ করতে হয়। একবার Array তৈরি হলে, তার সাইজ অপরিবর্তনীয় হয়ে থাকে।

var arr [5]int  // একটি সাইজ 5 এর integer Array ডিফাইন করা

এখানে, arr একটি int টাইপের Array, যার সাইজ ৫। Go তে arr এর প্রতিটি ইনডেক্স 0 থেকে শুরু হয়।


২. Array ইনিশিয়ালাইজেশন

Array তৈরির সময় আপনি তার মানও ইনিশিয়ালাইজ করতে পারেন:

package main

import "fmt"

func main() {
    // Array ইনিশিয়ালাইজ করা
    arr := [5]int{1, 2, 3, 4, 5}

    fmt.Println(arr)
}

এখানে, arr এর প্রথম পাঁচটি মান যথাক্রমে 1, 2, 3, 4, 5 দেওয়া হয়েছে। আউটপুট হবে:

[1 2 3 4 5]

২.১ Array এর সাইজ না জানলেও ইনিশিয়ালাইজেশন

Go তে আপনি Array-র সাইজ না জানলেও ইনিশিয়ালাইজ করতে পারেন এবং Go স্বয়ংক্রিয়ভাবে সাইজ নির্ধারণ করে:

arr := [...]int{10, 20, 30, 40, 50}
fmt.Println(arr)

এখানে, [...] দিয়ে Go নিজেই Array এর সাইজ নির্ধারণ করেছে। আউটপুট হবে:

[10 20 30 40 50]

৩. Array-র বিভিন্ন অপারেশন

৩.১ Array এর ইনডেক্সিং

Array তে যে কোনো মান অ্যাক্সেস করার জন্য আপনি ইনডেক্স ব্যবহার করতে পারেন। Go তে Array এর ইনডেক্স ০ থেকে শুরু হয়।

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}

    // ইনডেক্স দিয়ে Array মান অ্যাক্সেস
    fmt.Println(arr[0]) // আউটপুট: 1
    fmt.Println(arr[2]) // আউটপুট: 3
}

৩.২ Array এর লেন্থ (Length)

Go তে Array-এর সাইজ বা লেন্থ বের করতে len() ফাংশন ব্যবহার করা হয়।

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}

    fmt.Println(len(arr)) // আউটপুট: 5
}

৩.৩ Array-র মান পরিবর্তন করা

Array তে মান পরিবর্তন করতে আপনি সোজা ইনডেক্স ব্যবহার করতে পারেন।

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}

    // ইনডেক্স ব্যবহার করে মান পরিবর্তন
    arr[2] = 10

    fmt.Println(arr) // আউটপুট: [1 2 10 4 5]
}

এখানে, আমরা arr[2] মানটি পরিবর্তন করেছি এবং এটি 10 করেছি।


৪. Array এবং Slices (স্লাইসেস)

Go তে Slices হল একটি Array এর অংশ, যা ডাইনামিক সাইজ এবং সহজ ম্যানিপুলেশন সুবিধা দেয়। একটি Slice, Array-র একটি উপসেট হিসেবে কাজ করে, এবং এটি Array-র উপাদানগুলিকে পরিবর্তন এবং এক্সটেন্ড করতে পারে।

৪.১ Slice তৈরি করা

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}

    // Slice তৈরি করা
    slice := arr[1:4] // এটি arr এর ইনডেক্স 1 থেকে 3 পর্যন্ত উপাদান নিবে

    fmt.Println(slice) // আউটপুট: [2 3 4]
}

এখানে arr[1:4] দিয়ে আমরা Array এর কিছু উপাদান Slice-এ নিয়ে এসেছি, যা 2, 3, 4

৪.২ Slice এর লেন্থ এবং ক্যাপাসিটি

Slice-এ len() এবং cap() ফাংশন ব্যবহার করা যায় যা Slice এর লেন্থ এবং ক্যাপাসিটি (অর্থাৎ Slice-এর যে পরিমাণ স্থান ব্যবহার করা যায়) নির্ধারণ করে।

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    slice := arr[1:4]

    fmt.Println(len(slice))  // আউটপুট: 3
    fmt.Println(cap(slice))  // আউটপুট: 4
}

এখানে, len(slice) ৩ দেখাবে কারণ Slice তে তিনটি উপাদান রয়েছে এবং cap(slice) ৪ কারণ এটি পুরো Array এর চারটি উপাদান ধারণ করতে সক্ষম।

৪.৩ Slice ম্যানিপুলেশন

Slice তৈরি এবং সংশোধন করা সহজ। আপনি Slice-এ নতুন উপাদান যোগ করতে পারেন, যেমন:

package main

import "fmt"

func main() {
    slice := []int{10, 20, 30}
    slice = append(slice, 40)  // Slice এ নতুন উপাদান যোগ করা

    fmt.Println(slice)  // আউটপুট: [10 20 30 40]
}

এখানে, append() ফাংশন ব্যবহার করে Slice-এ একটি নতুন মান যোগ করা হয়েছে।


৫. Array এবং Slice এর মধ্যে পার্থক্য

  • Array: Fixed সাইজের, একবার ডিফাইন করার পরে সাইজ পরিবর্তন করা যায় না।
  • Slice: Dynamic সাইজের, যে কোনো সময় গতি অনুসারে নতুন উপাদান যোগ করা বা বাদ দেওয়া সম্ভব।

সারসংক্ষেপ

  • Array: Fixed সাইজের ডেটা স্ট্রাকচার যা একই ধরনের ডেটাকে একত্রিত করে রাখে।
  • Array Operations: Array এর মধ্যে ইনডেক্সিং, মান পরিবর্তন, লেন্থ পাওয়া ইত্যাদি অপারেশন করা যায়।
  • Slice: Array এর অংশ বা উপসেট যা ডাইনামিক সাইজ এবং ম্যানিপুলেশন সুবিধা দেয়। Slice ব্যবহার করলে Array এর উপাদানগুলো সহজে পরিবর্তন ও এক্সটেন্ড করা যায়।
  • Slice Operations: Slice তৈরি, এর লেন্থ এবং ক্যাপাসিটি জানা, নতুন উপাদান যোগ করা এবং ম্যানিপুলেট করা।

Go-তে Array এবং Slice ব্যবহার করে আপনি ডেটাকে আরও কার্যকরীভাবে ম্যানেজ করতে পারবেন, যা ডেটা ম্যানিপুলেশনের ক্ষেত্রে সুবিধাজনক।

Content added By

Go-তে Slices এর ধারণা এবং এর ব্যবহার

১. Slices (স্লাইস)

Go-তে Slices একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার, যা একটি অ্যারে (array)-এর উপর ভিত্তি করে তৈরি হয়, কিন্তু এতে কিছু অতিরিক্ত সুবিধা রয়েছে যা অ্যারের চেয়ে অনেক বেশি নমনীয় এবং সহজে ব্যবহারযোগ্য। স্লাইস অ্যারে এর একটি অংশ (sub-array) এবং এটি এক্সটেন্ড, কাট (resize) করা যেতে পারে, যা সাধারণ অ্যারে-তে সম্ভব নয়। স্লাইস মূলত ডাইনামিক অ্যারে হিসাবে কাজ করে।

১.১ Slices এবং Arrays এর পার্থক্য

  • Arrays: অ্যারে হল একটি ফিক্সড সাইজের ডেটা স্ট্রাকচার, যার আকার একবার নির্ধারিত হলে তা পরিবর্তন করা যায় না।
  • Slices: স্লাইস হলো এক ধরনের লেন্থ-লিমিটেড ডেটা স্ট্রাকচার, যার সাইজ পরিবর্তন করা যায়।

১.২ Slices ডেফিনিশন

Slices হল একটি প্রকারের ডেটা স্ট্রাকচার যা একাধিক মান ধারণ করে, কিন্তু এগুলোর সাইজ ফিক্সড নয়। স্লাইসের ডিফল্ট সাইজ এবং ক্যাপাসিটি পরিবর্তনশীল হয়।

Slices তিনটি মূল উপাদান ধারণ করে:

  1. Pointer: এটি স্লাইসের প্রথম উপাদানটির মেমরি অ্যাড্রেস ধারণ করে।
  2. Length: স্লাইসের বর্তমান সাইজ।
  3. Capacity: স্লাইসের মোট স্টোরেজ ক্ষমতা (এটি স্লাইসের ইনিশিয়ালাইজেশনের পর বৃদ্ধি পেতে পারে)।

২. Slices এর ব্যবহার

২.১ Slice তৈরি করা

Go-তে স্লাইস তৈরি করার কিছু সাধারণ পদ্ধতি রয়েছে:

১. Literal Slices
package main

import "fmt"

func main() {
    // স্লাইস তৈরি করা
    numbers := []int{10, 20, 30, 40}
    fmt.Println(numbers)  // আউটপুট: [10 20 30 40]
}

এখানে, numbers একটি স্লাইস যার মধ্যে চারটি মান রয়েছে। স্লাইসের সাইজ ও ক্যাপাসিটি স্বয়ংক্রিয়ভাবে ঠিক করা হয়।

২. Empty Slice
package main

import "fmt"

func main() {
    var emptySlice []int  // শূন্য স্লাইস
    fmt.Println(emptySlice)  // আউটপুট: []
}

এখানে, একটি শূন্য স্লাইস তৈরি করা হয়েছে এবং আউটপুট হবে একটি খালি স্লাইস।

২.২ Slice Initialization with make

make ফাংশন ব্যবহার করে স্লাইস তৈরি করা যায়, যেখানে আপনি স্লাইসের লেন্থ এবং ক্যাপাসিটি নির্দিষ্ট করতে পারেন:

package main

import "fmt"

func main() {
    // make ফাংশন দিয়ে স্লাইস তৈরি
    slice := make([]int, 5, 10)  // স্লাইসের লেন্থ 5 এবং ক্যাপাসিটি 10
    fmt.Println(slice)   // আউটপুট: [0 0 0 0 0]
    fmt.Println(len(slice))  // আউটপুট: 5
    fmt.Println(cap(slice))  // আউটপুট: 10
}

এখানে, make ফাংশন দিয়ে একটি স্লাইস তৈরি করা হয়েছে যার লেন্থ ৫ এবং ক্যাপাসিটি ১০। এর ফলে, স্লাইসটি ফিক্সড সাইজের, কিন্তু এটি ১০টি মান ধারণ করতে সক্ষম।

২.৩ Slice Indexing এবং Slicing

স্লাইসের একটি অংশ বের করা যায়। এটি অ্যারে স্লাইসিংয়ের মতোই কাজ করে।

package main

import "fmt"

func main() {
    numbers := []int{10, 20, 30, 40, 50, 60}

    // স্লাইসিং
    part := numbers[2:5] // এখানে indices 2 থেকে 4 পর্যন্ত স্লাইস হবে
    fmt.Println(part)  // আউটপুট: [30 40 50]
}

এখানে, numbers[2:5] দ্বারা স্লাইসিং করা হয়েছে, যার ফলে 30, 40, এবং 50 থাকবে। এই রেঞ্জটি প্রথম ইনডেক্স থেকে দ্বিতীয় ইনডেক্সের আগে পর্যন্ত হবে।

২.৪ Append Function with Slice

Go তে স্লাইসের সাথে নতুন উপাদান যোগ করতে append ফাংশন ব্যবহার করা হয়। স্লাইসের শেষে নতুন মান যোগ করা হয়, এবং প্রয়োজনে স্লাইসের আকার বৃদ্ধি পায়।

package main

import "fmt"

func main() {
    numbers := []int{10, 20, 30}
    numbers = append(numbers, 40, 50)  // নতুন উপাদান যোগ করা
    fmt.Println(numbers)  // আউটপুট: [10 20 30 40 50]
}

এখানে, append ফাংশনটি নতুন মান যোগ করে এবং স্লাইসটির আকার বাড়িয়ে দেয়।

২.৫ Slice Capacity এবং Length

len এবং cap ফাংশন ব্যবহার করে আপনি স্লাইসের দৈর্ঘ্য এবং ক্যাপাসিটি বের করতে পারেন।

package main

import "fmt"

func main() {
    numbers := []int{10, 20, 30, 40, 50}
    fmt.Println("Length:", len(numbers)) // আউটপুট: 5
    fmt.Println("Capacity:", cap(numbers)) // আউটপুট: 5 (যেহেতু slice তৈরি হয়েছিল 5 উপাদান দিয়ে)
}
  • len: স্লাইসের বর্তমান সাইজ, অর্থাৎ এর মধ্যে কয়টি উপাদান রয়েছে।
  • cap: স্লাইসের ক্যাপাসিটি, অর্থাৎ এটি কতগুলো উপাদান ধারণ করতে সক্ষম।

৩. Slices এর অন্যান্য ব্যবহার

৩.১ Slice Copying

স্লাইসের কপি তৈরি করতে copy ফাংশন ব্যবহার করা হয়। এটি একটি স্লাইসের মান অন্য একটি স্লাইসে কপি করে।

package main

import "fmt"

func main() {
    numbers := []int{10, 20, 30, 40}
    copyNumbers := make([]int, len(numbers))  // কপি স্লাইস তৈরি
    copy(copyNumbers, numbers)  // numbers স্লাইস থেকে copyNumbers স্লাইসে কপি করা
    fmt.Println(copyNumbers)  // আউটপুট: [10 20 30 40]
}

এখানে, copy ফাংশনটি numbers স্লাইসের মান copyNumbers স্লাইসে কপি করেছে।

৩.২ Slices with Structs

আপনি স্লাইসের মধ্যে structs বা কাস্টম ডেটা টাইপও রাখতে পারেন।

package main

import "fmt"

// Struct ডিফাইন করা
type Person struct {
    Name string
    Age  int
}

func main() {
    people := []Person{
        {"Alice", 30},
        {"Bob", 25},
    }

    fmt.Println(people)
}

এখানে, Person struct-কে স্লাইসে রাখা হয়েছে এবং আমরা স্লাইসটির মান প্রিন্ট করেছি।


সারসংক্ষেপ

  • Slices হল Go-তে এমন একটি ডেটা স্ট্রাকচার যা অ্যারের একটি ভ্যারিয়েবল সাইজের অংশ। এটি ফ্লেক্সিবল এবং ডাইনামিক, যা একটি অ্যারের মতো আচরণ করে, তবে তার সাইজ পরিবর্তনশীল।
  • Slices এর সুবিধা হল, এগুলির দৈর্ঘ্য এবং ক্যাপাসিটি স্বয়ংক্রিয়ভাবে পরিচালিত হয়, এবং এর মান যেকোনো সময়ে পরিবর্তন করা যায়।
  • Slices ব্যবহার করে আপনি সহজেই ডেটার অংশ বের করতে পারেন (স্লাইসিং), নতুন উপাদান যোগ করতে পারেন (append), এবং কপি তৈরি করতে পারেন (copy)।

Slices Go-তে ডেটা ম্যানিপুলেশন এবং মেমরি ব্যবস্থাপনায় একটি অত্যন্ত শক্তিশালী টুল, যা কোডিংকে আরও সহজ এবং দক্ষ করে তোলে।

Content added By

Go-তে Multidimensional Arrays এবং Slices এর ব্যবহার

Go প্রোগ্রামিং ভাষায় Multidimensional Arrays এবং Slices দুটি ডেটা স্ট্রাকচার যা একাধিক মান ধারণ করতে সক্ষম। এগুলি সাধারণত ব্যবহার করা হয় যখন আপনাকে একাধিক ডেটা একত্রে ম্যানেজ করতে হয়, যেমন টেবিল বা ম্যাট্রিক্সের মতো কাঠামো। চলুন, এই দুইটি ডেটা স্ট্রাকচার এর ব্যবহার এবং তাদের মধ্যে পার্থক্য সম্পর্কে আলোচনা করি।


১. Multidimensional Arrays (বহুমাত্রিক অ্যারে)

Multidimensional Arrays হল অ্যারের অ্যারে। এটি এমন একটি অ্যারে যা এক বা একাধিক অ্যারে ধারণ করে। Go-তে, বহুমাত্রিক অ্যারে সাধারণত 2D বা 3D ম্যাট্রিক্স বা টেবিলের মতো ডেটা সংরক্ষণ করতে ব্যবহৃত হয়।

১.১ Multidimensional Array ডিফাইনেশন

Go তে বহুমাত্রিক অ্যারে ডিফাইন করতে প্রথমে তার আকার নির্ধারণ করতে হয়, যেমন 2D অ্যারে (যেখানে 2টি ডাইমেনশন থাকে)।

package main

import "fmt"

func main() {
    // 2D অ্যারে ডিফাইন করা
    var arr [2][3]int

    // অ্যারের মান অ্যাসাইন করা
    arr[0][0] = 1
    arr[0][1] = 2
    arr[0][2] = 3
    arr[1][0] = 4
    arr[1][1] = 5
    arr[1][2] = 6

    fmt.Println("Array:", arr)
}

এখানে, arr একটি 2D অ্যারে যা 2টি রো এবং 3টি কলাম ধারণ করে। আমরা তার মানগুলি অ্যাসাইন করেছি এবং পরবর্তীতে অ্যারে প্রিন্ট করেছি।

আউটপুট:

Array: [[1 2 3] [4 5 6]]

১.২ 2D অ্যারে ইনিশিয়ালাইজ করা

এটি সরাসরি ইনিশিয়ালাইজ করেও করা যেতে পারে:

package main

import "fmt"

func main() {
    // 2D অ্যারে ইনিশিয়ালাইজ করা
    arr := [2][3]int{
        {1, 2, 3},
        {4, 5, 6},
    }

    fmt.Println("Array:", arr)
}

এখানে, আমরা সরাসরি অ্যারের মানগুলো ইনিশিয়ালাইজ করেছি। আউটপুট একই হবে:

Array: [[1 2 3] [4 5 6]]

১.৩ 3D অ্যারে

এটি 3D অ্যারের একটি উদাহরণ:

package main

import "fmt"

func main() {
    // 3D অ্যারে ডিফাইন করা
    var arr [2][2][2]int

    // অ্যারের মান অ্যাসাইন করা
    arr[0][0][0] = 1
    arr[0][0][1] = 2
    arr[0][1][0] = 3
    arr[0][1][1] = 4
    arr[1][0][0] = 5
    arr[1][0][1] = 6
    arr[1][1][0] = 7
    arr[1][1][1] = 8

    fmt.Println("3D Array:", arr)
}

এটি একটি 3D অ্যারে, যা 2টি 2D অ্যারে ধারণ করে, এবং প্রতিটি 2D অ্যারে 2টি 1D অ্যারে ধারণ করে।


২. Slices (স্লাইস)

Slices হল Go তে অ্যারের আরো বেশি উন্নত এবং নমনীয় সংস্করণ। এটি ডাইনামিক আকারে পরিবর্তিত হতে পারে এবং এটি অধিক কার্যকরীভাবে কাজ করে যখন অ্যারের আকার জানানো সম্ভব না থাকে বা যখন ডেটা পরিবর্তিত হতে পারে।

২.১ Slice ডিফাইনেশন

Slices অ্যারের মতো হলেও তাদের আকার স্থির নয়। তারা [] দ্বারা ডিফাইন করা হয়।

package main

import "fmt"

func main() {
    // Slice ডিফাইন করা
    var slice []int

    // Slice-এ মান অ্যাসাইন করা
    slice = append(slice, 1)
    slice = append(slice, 2)
    slice = append(slice, 3)

    fmt.Println("Slice:", slice)
}

এখানে, আমরা একটি slice তৈরি করেছি এবং append ফাংশন ব্যবহার করে এতে মান যুক্ত করেছি। append ফাংশনটি স্লাইসের শেষে নতুন মান যোগ করে এবং স্লাইসটির আকার স্বয়ংক্রিয়ভাবে বৃদ্ধি পায়।

আউটপুট:

Slice: [1 2 3]

২.২ Slice ইনিশিয়ালাইজ করা

Slice ইনিশিয়ালাইজ করার সময়, আমরা তার প্রথম মানগুলোও সরাসরি দিতে পারি।

package main

import "fmt"

func main() {
    // Slice ইনিশিয়ালাইজ করা
    slice := []int{1, 2, 3, 4}

    fmt.Println("Slice:", slice)
}

এখানে, স্লাইসে মানগুলি সরাসরি ইনিশিয়ালাইজ করা হয়েছে। আউটপুট:

Slice: [1 2 3 4]

২.৩ Slice এর আকার এবং ক্যাপাসিটি

Go তে স্লাইসের দুটি গুরুত্বপূর্ণ গুণাবলী থাকে: length এবং capacitylen() ফাংশন দিয়ে স্লাইসের আকার এবং cap() ফাংশন দিয়ে তার ক্যাপাসিটি পাওয়া যায়।

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}

    fmt.Println("Length:", len(slice))    // আউটপুট: 5
    fmt.Println("Capacity:", cap(slice))  // আউটপুট: 5
}

এখানে, স্লাইসের আকার 5 এবং ক্যাপাসিটি 5।

২.৪ Slice এর অংশ (Slicing a Slice)

Slice-এ বিভিন্ন অংশে ডাটা অ্যাক্সেস করতে [:] স্লাইসিং অপারেটর ব্যবহার করা হয়। এটি একটি স্লাইসের নির্দিষ্ট পরিসর তৈরি করে।

package main

import "fmt"

func main() {
    slice := []int{10, 20, 30, 40, 50}

    // Slice-এর অংশ নেওয়া
    newSlice := slice[1:4]  // এটি 20, 30, 40 নেয়

    fmt.Println("Original Slice:", slice)
    fmt.Println("Sliced Slice:", newSlice)
}

আউটপুট:

Original Slice: [10 20 30 40 50]
Sliced Slice: [20 30 40]

৩. Multidimensional Slices (বহুমাত্রিক স্লাইস)

Slices এর সাহায্যে আপনি বহুমাত্রিক অ্যারে তৈরি করতে পারেন, যা 2D বা 3D টেবিলের মতো কাজ করতে পারে।

৩.১ 2D Slice উদাহরণ

package main

import "fmt"

func main() {
    // 2D Slice ডিফাইন করা
    matrix := [][]int{
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9},
    }

    fmt.Println("2D Slice:", matrix)
}

এখানে, matrix একটি 2D স্লাইস, যা তিনটি ভিন্ন স্লাইস ধারণ করে। আউটপুট:

2D Slice: [[1 2 3] [4 5 6] [7 8 9]]

সারসংক্ষেপ

  • Multidimensional Arrays: Go-তে একাধিক মাত্রার অ্যারে তৈরি করতে হয়, যা একে অন্যের মধ্যে অ্যারের ইনস্ট্যান্স ধারণ করে। সাধারণত ম্যাট্রিক্স বা টেবিলের জন্য ব্যবহৃত হয়।
  • Slices: স্লাইস হলো অ্যারের একটি উন্নত সংস্করণ যা আকারে পরিবর্তিত হতে পারে। স্লাইসের আকার এবং ক্যাপাসিটি স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়।
  • Multidimensional Slices: স্লাইস ব্যবহার করে বহুমাত্রিক অ্যারে তৈরি করা সম্ভব, যা টেবিল বা ম্যাট্রিক্সের মতো কাজ করে।

Go তে Multidimensional Arrays এবং Slices ব্যবহার করে আপনি আরও দক্ষ এবং নমনীয় ডেটা ম্যানিপুলেশন করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...