কম্পিউটার টিউটোরিয়াল

C#-এ লিস্টে আইটেমের ইনডেক্স এক লাইনে বের করা (FindIndex + Contains)

C#-এ `List<T>`-এ নির্দিষ্ট শর্ত পূরণকারী প্রথম আইটেমের ইনডেক্স বের করার জন্য `FindIndex` মেথড ব্যবহার করা হয়। স্ট্রিং obsah চেকের জন্য `Contains` কেবল একটি উদাহরণ।

বেসিক সিনট্যাক্স


int index = myList.FindIndex(item => item.Contains("searchText"));

সম্পূর্ণ উদাহরণ


using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<string> myList = new List<string> 
        { 
            "Football", 
            "Soccer", 
            "Tennis", 
            "Cricket" 
        };
        
        // "Tennis" ধারণকারী প্রথম আইটেমের ইনডেক্স
        int index = myList.FindIndex(s => s.Contains("Tennis"));
        
        Console.WriteLine($"লিস্ট: {string.Join(", ", myList)}");
        Console.WriteLine($"'Tennis' ধারণকারী আইটেমের ইনডেক্স: {index}");
        
        // না পাওয়া গেলে -1 রিটার্ন করে
        int notFound = myList.FindIndex(s => s.Contains("Golf"));
        Console.WriteLine($"'Golf' খুঁজে পাওয়া যায়নি: {notFound}"); // -1
        
        // এক্স্যাক্ট ম্যাচের জন্য
        int exactIndex = myList.FindIndex(s => s == "Soccer");
        Console.WriteLine($"'Soccer' এক্স্যাক্ট ম্যাচ: {exactIndex}"); // 1
    }
}

আউটপুট


লিস্ট: Football, Soccer, Tennis, Cricket
'Tennis' ধারণকারী আইটেমের ইনডেক্স: 2
'Golf' খুঁজে পাওয়া যায়নি: -1
'Soccer' এক্স্যাক্ট ম্যাচ: 1

FindIndex ওভারলোডস


// ১. পুরো লিস্ট সার্চ
int index1 = list.FindIndex(predicate);

// ২. নির্দিষ্ট ইনডেক্স থেকে শুরু
int index2 = list.FindIndex(startIndex, predicate);

// ৩. নির্দিষ্ট রেঞ্জে সার্চ
int index3 = list.FindIndex(startIndex, count, predicate);

বিকল্প পদ্ধতিগুলো

IndexOf (এক্স্যাক্ট ম্যাচের জন্য)


int index = myList.IndexOf("Tennis"); // সরাসরি স্ট্রিং ম্যাচ, O(n)

FindLastIndex (শেষ থেকে সার্চ)


int lastIndex = myList.FindLastIndex(s => s.Contains("ball")); // "Football" এর ইনডেক্স

LINQ ব্যবহার (বолее ফ্লেক্সিবল)


using System.Linq;

// প্রথম ম্যাচের ইনডেক্স
int index = myList.Select((item, idx) => new { item, idx })
                  .FirstOrDefault(x => x.item.Contains("Tennis"))?.idx ?? -1;

// সব ম্যাচের ইনডেক্স
var allIndices = myList.Select((item, idx) => new { item, idx })
                       .Where(x => x.item.Contains("ball"))
                       .Select(x => x.idx)
                       .ToList(); // [0] for "Football"

BinarySearch (সর্ট করা লিস্টের জন্য - O(log n))


var sortedList = new List<int> { 1, 3, 5, 7, 9 };
int index = sortedList.BinarySearch(5); // 2 (পাওয়া গেলে)
int notFound = sortedList.BinarySearch(4); // ~1 (বিটওয়াইজ কমপ্লিমেন্ট = ইনসারশন পয়েন্ট)

পারফরম্যান্স তুলনা

পদ্ধতিটাইম কমপ্লেক্সিটিব্যবহার
FindIndex / IndexOfO(n)অনসর্টেড লিস্ট, সাধারণ ব্যবহার
BinarySearchO(log n)সর্ট করা লিস্ট, বড় ডেটা
LINQ Select+FirstOrDefaultO(n)কমপ্লেক্স কোয়েরি, প্রজেকশন দরকার হলে

সারসংক্ষেপ

  • সিম্পল সার্চ: `list.FindIndex(predicate)` - প্রথম ম্যাচের ইনডেক্স রিটার্ন করে, না পেলে -1
  • এক্স্যাক্ট ম্যাচ: `list.IndexOf(item)` - আরও পঠনীয়
  • শর্ত ভিত্তিক: ল্যাম্বডা এক্সপ্রেশন `item => item.Contains("text")` বা `item => item.Property == value`
  • সর্ট করা লিস্ট: `BinarySearch` ব্যবহার করুন O(log n)-এর জন্য
  1. Tkinter Listbox-এ আইটেমের ইনডেক্স কীভাবে পাবেন?

  2. পাইথন লিস্ট থেকে সেকেন্ড-টু-লাস্ট এলিমেন্ট কীভাবে পাবেন?

  3. পাইথন লিস্ট থেকে লাস্ট এলিমেন্ট কীভাবে পাবেন?

  4. পাইথন লিস্টে একটি উপাদানের ইনডেক্স খুঁজে বের করার পদ্ধতি