Lesson ৭ মিনিট পড়া

অ্যারেস এবং লিস্টস (Arrays & Lists)

একগুচ্ছ জিনিসপত্রকে এক জায়গায় গুছিয়ে রাখুন

অ্যারে — নির্দিষ্ট আকারের পাত্র (Arrays — Fixed-Size Containers)

একটি অ্যারেকে (array) লকারের একটা সারির (row of lockers) মতো ভাবতে পারেন। যখন আপনি এটি তৈরি করেন, তখন আপনিই সিদ্ধান্ত নেন যে আপনার মোট কতগুলো লকার প্রয়োজন। প্রতিটি লকারের একটি করে নম্বর শুরু হয় ০ (0) থেকে (১ থেকে নয় — কম্পিউটারগুলো এদিক দিয়ে বেশ অদ্ভুত হয়ে থাকে)। আপনি প্রতিটি লকারে একটি করে জিনিস রাখতে পারেন এবং পরবর্তীতে সেই নম্বর দিয়ে জিনিসটি খুঁজেও বের করতে পারেন।

তবে এখানে একটা সমস্যা আছে! একবার আপনি লকারের সারিটি তৈরি করে ফেললে, আপনি আর কোনো লকার যুক্ত করতে বা সরিয়ে ফেলতে পারবেন না। এর সাইজ বা আকার একবারেই নির্ধারণ হয়ে যায় বা লক (lock) হয়ে যায়। আর এ কারণেই অ্যারেকে (array) "ফিক্সড-সাইজ (fixed-size)" বা নির্দিষ্ট আকারের বলা হয়ে থাকে।

অ্যারে বেসিকস (Array Basics)

// Create an array with initial values
string[] planets = { "Mercury", "Venus", "Earth", "Mars" };
// Access by index (0-based!)
Console.WriteLine($"First planet: {planets[0]}");
Console.WriteLine($"Third planet: {planets[2]}");
Console.WriteLine($"Total planets: {planets.Length}");
// Modify an element
planets[3] = "Red Planet";
Console.WriteLine($"Mars is now: {planets[3]}");
// Create an empty array of size 5
int[] scores = new int[5]; // all zeros by default
scores[0] = 95;
scores[1] = 87;
// Loop through with foreach
Console.Write("Scores: ");
foreach (int s in scores)
Console.Write($"{s} ");
Console.WriteLine();
// Loop with index using for
for (int i = 0; i < planets.Length; i++)
Console.WriteLine($" [{i}] {planets[i]}");
Output
First planet:  Mercury
Third planet:  Earth
Total planets: 4
Mars is now:   Red Planet
Scores: 95 87 0 0 0 
  [0] Mercury
  [1] Venus
  [2] Earth
  [3] Red Planet

List<T> — নমনীয় অ্যারেই হলো লিস্ট (List<T> — The Flexible Array)

অ্যারের গতি বেশি হলেও এরা বেশ অনমনীয় বা রিজিড (rigid) হয়ে থাকে। অন্যদিকে, List<T> হলো একটি জাদুর ব্যাগের (magical expanding backpack) মতো — আপনি চাইলে ইচ্ছামতো এর ভেতর নতুন জিনিসপত্র ঢোকাতে পারেন আর এটি নিজে থেকেই বড় হতে থাকবে। তাছাড়া, আপনি চাইলে যেকোনো জিনিস বাদ দিতে, নির্দিষ্ট কোনো জায়গায় নতুন কিছু ঢোকাতে এবং খুব সহজেই কোনো কিছু খুঁজতে পারেন।

এখানে <T> অংশটির মাধ্যমে আপনি লিস্টটিকে বলে দেন যে এটি কী ধরনের জিনিস বা ডেটা ধারণ করতে পারবে: যেমন List<int>, List<string> ইত্যাদি। এই পদ্ধতিকে জেনেরিক (generic) বলা হয়ে থাকে — এটি টাইপ-সেফ (type-safe), অর্থাৎ আপনি কোনোভাবেই একটি int বা পূর্ণ সংখ্যার লিস্টে ভুল করেও কোনো স্ট্রিং ঢোকাতে পারবেন না।

বাস্তব জীবনে সি শার্প (C#) নিয়ে কাজ করার সময় আপনি অ্যারের চেয়ে List<T>-কেই অনেক বেশি ব্যবহার করবেন।

ব্যাবহারিক ক্ষেত্রে List<T> (List<T> in Action)

// Create a list
List<string> snacks = new List<string> { "Chips", "Cookies", "Popcorn" };
// Add items
snacks.Add("Pretzels");
snacks.Add("Candy");
Console.WriteLine($"Snacks: {snacks.Count}"); // Count, not Length!
// Insert at a specific position
snacks.Insert(0, "Fruit"); // add at the beginning
// Remove items
snacks.Remove("Candy"); // remove by value
snacks.RemoveAt(2); // remove by index
// Check if item exists
Console.WriteLine($"Has Chips? {snacks.Contains("Chips")}");
// Print all snacks
foreach (string snack in snacks)
Console.WriteLine($" - {snack}");
// Sort alphabetically
snacks.Sort();
Console.WriteLine("\nSorted:");
foreach (string snack in snacks)
Console.WriteLine($" - {snack}");
Output
Snacks: 5
Has Chips? True
  - Fruit
  - Chips
  - Popcorn
  - Pretzels

Sorted:
  - Chips
  - Fruit
  - Popcorn
  - Pretzels

LINQ — বসের মতো ডেটার কোয়েরি করা (LINQ — Query Your Data Like a Boss)

LINQ বা লিংক (Language Integrated Query) আপনাকে খুব পরিষ্কার এবং সহজে পড়া যায় এমন কোডের মাধ্যমে বিভিন্ন কালেকশনকে (collections) ফিল্টার (filter), ট্রান্সফর্ম (transform) এবং সার্চ (search) করার সুযোগ দেয়। একে সি শার্পের (C#) ভেতরে থাকা একটি সুপার-পাওয়ার্ড সার্চ ইঞ্জিন (super-powered search engine) বা শক্তিশালী সার্চ ইঞ্জিন হিসেবে ভাবতে পারেন।

শুরু করার জন্য দুটি প্রধান মেথড হলো:

  • .Where() — ফিল্টার করার জন্য: "আমাকে কেবল সেই আইটেমগুলোই দাও, যেগুলো এই নির্দিষ্ট শর্তের সাথে মিলে যায়"
  • .Select() — ট্রান্সফর্ম বা রূপান্তর করার জন্য: "প্রতিটি আইটেমকে পরিবর্তন করে ভিন্ন কিছু বানিয়ে ফেলো"

আমরা লিনকের (LINQ) বিষয়ে পরের কোনো একটি লেসনে আরও বিস্তারিত জানব, তবে এখনকার জন্য শুধু একটু ধারণা নিয়ে রাখুন।

কালেকশনের সাথে লিনক বেসিকস (LINQ Basics with Collections)

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Where — filter items
var evens = numbers.Where(n => n % 2 == 0);
Console.Write("Evens: ");
foreach (int n in evens) Console.Write($"{n} ");
Console.WriteLine();
// Select — transform items
var doubled = numbers.Select(n => n * 2);
Console.Write("Doubled: ");
foreach (int n in doubled) Console.Write($"{n} ");
Console.WriteLine();
// Chain them together!
var bigEvensDoubled = numbers
.Where(n => n % 2 == 0)
.Where(n => n > 4)
.Select(n => n * 2);
Console.Write("Big evens doubled: ");
foreach (int n in bigEvensDoubled) Console.Write($"{n} ");
Console.WriteLine();
// Convert LINQ result to List
List<int> result = numbers.Where(n => n > 7).ToList();
Console.WriteLine($"Numbers > 7: [{string.Join(", ", result)}]");
Output
Evens: 2 4 6 8 10 
Doubled: 2 4 6 8 10 12 14 16 18 20 
Big evens doubled: 12 16 20 
Numbers > 7: [8, 9, 10]
Note: 📏 অ্যারে বনাম লিস্ট ব্যবহারের সাধারণ নিয়ম: যখন আপনি নিশ্চিতভাবে জানেন যে আপনার নির্দিষ্ট ঠিক কয়টি আইটেম প্রয়োজন (যেমন সপ্তাহের সাত দিনের নাম), তখন অ্যারে ব্যবহার করুন। আর বাকি সব ক্ষেত্রে List<T> ব্যবহার করুন — এটি অনেক বেশি নমনীয় বা ফ্লেক্সিবল (flexible) এবং বড় বড় রিয়েল-লাইফ (real-life) প্রজেক্টে আপনি ৯০% সময় এটিই ব্যবহার করবেন।
চ্যালেঞ্জ

ছোট কুইজ

সি শার্পে (C#) একটি অ্যারের প্রথম বা FIRST এলিমেন্ট বা উপাদানের ইনডেক্স কত?

পড়া চালিয়ে যান

LoopsMethods