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 / IndexOf | O(n) | অনসর্টেড লিস্ট, সাধারণ ব্যবহার |
| BinarySearch | O(log n) | সর্ট করা লিস্ট, বড় ডেটা |
| LINQ Select+FirstOrDefault | O(n) | কমপ্লেক্স কোয়েরি, প্রজেকশন দরকার হলে |
সারসংক্ষেপ
- সিম্পল সার্চ: `list.FindIndex(predicate)` - প্রথম ম্যাচের ইনডেক্স রিটার্ন করে, না পেলে -1
- এক্স্যাক্ট ম্যাচ: `list.IndexOf(item)` - আরও পঠনীয়
- শর্ত ভিত্তিক: ল্যাম্বডা এক্সপ্রেশন `item => item.Contains("text")` বা `item => item.Property == value`
- সর্ট করা লিস্ট: `BinarySearch` ব্যবহার করুন O(log n)-এর জন্য