মূল কন্টেন্টে যান
মডিউল 4 · 2-এর পাঠ 5কোর্সে 17/50~15 min
মডিউল পাঠ (2/5)

স্লাইস: ইডিওম্যাটিক গঠন

একটি স্লাইস হল Go-তে সবচেয়ে বেশি ব্যবহৃত ডেটা স্ট্রাকচার: একটি ডাইনামিক ভিউ একটি অন্তর্নিহিত অ্যারের উপর। সিনট্যাক্স: []T। অ্যারে থেকে ভিন্ন, দৈর্ঘ্য হল টাইপের অংশ নয়, এবং আপনি append এর সাথে এটি বাড়াতে পারেন।

একটি টুকরা শারীরস্থান

অভ্যন্তরীণভাবে একটি স্লাইস একটি তিন-ক্ষেত্রের কাঠামো:

  • অন্তর্নিহিত অ্যারের প্রথম উপাদানটির জন্য একটি পয়েন্টার
  • একটি দৈর্ঘ্য (len): দৃশ্যমান উপাদানের সংখ্যা
  • একটি ক্ষমতা (cap): দৃশ্যের শুরু থেকে উপলব্ধ উপাদান অন্তর্নিহিত অ্যারের শেষ পর্যন্ত
Go
s := []int{10, 20, 30}
fmt.Println(len(s), cap(s)) // 3 3

সৃষ্টি

Go
a := []int{1, 2, 3}          // literal
b := make([]int, 3)          // [0 0 0]   len=3 cap=3
c := make([]int, 3, 10)      // len=3 cap=10 (reserved)
var d []int                  // nil slice: len=0 cap=0, still usable with append

append: সর্বদা ফলাফল বরাদ্দ করুন

append উপাদান যোগ করে এবং একটি নতুন স্লাইস প্রদান করে (সম্ভাব্যভাবে ক্ষমতা অপর্যাপ্ত হলে একটি নতুন অ্যারে বরাদ্দ করা হচ্ছে):

Go
s := []int{1, 2, 3}
s = append(s, 4)              // [1 2 3 4]
s = append(s, 5, 6, 7)        // append multiple elements
s = append(s, altra...)       // concatenate another slice (spread)

স্লাইস এক্সপ্রেশন s[a:b]

a (অন্তর্ভুক্ত) থেকে b (এক্সক্লুসিভ) থেকে একটি সাব-স্লাইস বের করে:

Go
s := []int{10, 20, 30, 40, 50}
sub := s[1:4]              // [20 30 40]
inizio := s[:2]            // [10 20]
fine := s[3:]              // [40 50]
intera := s[:]             // [10 20 30 40 50]

সাব-স্লাইস অন্তর্নিহিত অ্যারে ভাগ করে মূল স্লাইসের সাথে: sub[i] = ... এর মাধ্যমে মিউটেশনগুলি s এও দৃশ্যমান।

পিটফল: অ্যারে শেয়ারিং

Go
s := []int{1, 2, 3, 4}
sub := s[0:2]
sub[0] = 99
fmt.Println(s)             // [99 2 3 4] — modified!

একটি স্বাধীন অনুলিপি পেতে, copy বা append ব্যবহার করুন:

Go
out := make([]int, len(sub))
copy(out, sub)

চেষ্টা করে দেখুন

ব্যায়াম#go.m4.l2.e1
প্রচেষ্টা: 0লোড হচ্ছে...

[1, 2, 3] দিয়ে একটি স্লাইস s তৈরি করুন এবং 4 যোগ করতে append ব্যবহার করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

সর্বদা `s`-এ আবার যুক্ত করার ফলাফল বরাদ্দ করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#go.m4.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

সূচক 1 থেকে 3 এক্সক্লুসিভ (যেমন [20, 30]) সহ উপাদানগুলি বের করতে একটি স্লাইস এক্সপ্রেশন ব্যবহার করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

সিনট্যাক্স: `s[start:end]`, `start` inclusive, `end` exclusive.

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

Quiz#go.m4.l2.e3
প্রস্তুত

এর মধ্যে কোনটি লিখতে ভুল?

Go
s := []int{1, 2, 3}
// (a) s = append(s, 4)
// (b) append(s, 4)
উত্তরের বিকল্প

রিক্যাপ

  • []T: একটি অ্যারের উপর গতিশীল দৃশ্য; ট্রিপল (ptr, লেন, ক্যাপ)।
  • make([]T, len, cap) আগে থেকে বরাদ্দ করতে; একটি ব্যবহারযোগ্য শূন্য স্লাইসের জন্য var s []T।
  • s = append(s, ...): সর্বদা ফলাফল বরাদ্দ করুন।
  • s[a:b] অন্তর্নিহিত অ্যারে ভাগ করে: copy(...) স্বাধীন কপিগুলির জন্য৷
  • একটি nil স্লাইস = পড়তে/পরিসীমা/সংযোজন করতে ঠিক আছে; একটি শূন্য মানচিত্র থেকে বেশ ভিন্ন.