جستجو در لیست در سی شارپ
در سیشارپ، با متد Find میتوان اولین عنصر مطابق شرط را در لیست پیدا کرد. برای جستجوی چند عنصر از FindAll استفاده میشود.
14 آبان 1405
لینک کوتاه
جستجو در لیست در سیشارپ
جستجو در لیست یکی از عملیاتهای پرکاربرد در برنامهنویسی سیشارپ (#C) است. در بسیاری از برنامهها، اطلاعات مختلفی مانند نام کاربران، محصولات، سفارشها، شمارهها و دادههای دیگر در لیستها ذخیره میشوند.
برای دسترسی به اطلاعات موردنظر، لازم است بتوانیم عناصر یک لیست را بر اساس مقدار مشخص یا شرط دلخواه جستجو کنیم.
در زبان سیشارپ، کلاس <List<T مجموعهای از عناصر را در خود نگهداری میکند و متدهای مختلفی برای جستجو، فیلتر کردن و بررسی وجود دادهها در اختیار برنامهنویس قرار میدهد.
از مهمترین این متدها میتوان به Find، FindAll، FindIndex، FindLast و Contains اشاره کرد.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
ایجاد لیست در سیشارپ
قبل از جستجو، ابتدا باید یک لیست ایجاد کنیم. برای استفاده از کلاس <List<T معمولاً فضای نام System.Collections.Generic موردنیاز است.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<string> names = new List<string>
{
"Ali",
"Reza",
"Sara",
"Mohammad",
"Nima"
};
}
}
در این مثال، یک لیست از رشتهها با نام names ایجاد شده است.
این لیست شامل پنج نام مختلف است.
اکنون میتوانیم با استفاده از متدهای جستجو، عنصر موردنظر را پیدا کنیم.
جستجو با متد Find در سی شارپ
متد Find یکی از سادهترین روشها برای جستجو در لیست است.این متد اولین عنصری را برمیگرداند که شرط مشخصشده را برآورده کند.
شرط جستجو معمولاً با استفاده از یک عبارت لامبدا تعریف میشود.
List<int> numbers = new List<int>
{
10, 20, 30, 40, 50
};
int result = numbers.Find(x => x > 25);
Console.WriteLine(result);
خروجی:
30
در این مثال، شرط x > 25 مشخص میکند که فقط اعداد بزرگتر از ۲۵ موردنظر هستند.
از آنجا که متد Find اولین عنصر مطابق شرط را برمیگرداند، مقدار ۳۰ نتیجه جستجو خواهد بود.
اگر هیچ عنصری مطابق شرط پیدا نشود، مقدار پیشفرض نوع داده برگردانده میشود.
برای مثال، در لیست اعداد صحیح، این مقدار صفر است و در لیست رشتهها، مقدار null خواهد بود.
جستجوی یک مقدار مشخص با Contains
اگر هدف فقط بررسی وجود یک مقدار در لیست باشد، استفاده از متد Contains روش سادهای است.این متد یک مقدار بولی برمیگرداند که مشخص میکند عنصر موردنظر در لیست وجود دارد یا خیر.
List<string> names = new List<string>
{
"Ali", "Reza", "Sara"
};
bool exists = names.Contains("Sara");
Console.WriteLine(exists);
خروجی:
True
در این مثال، چون نام Sara در لیست وجود دارد، نتیجه برابر با True است.
اگر نام موردنظر در لیست وجود نداشته باشد، مقدار False برگردانده میشود.
متد Contains برای بررسی وجود اعداد، رشتهها و سایر مقادیر مناسب است.
البته نحوه مقایسه به نوع داده و پیادهسازی مقایسه برابری آن بستگی دارد.
جستجوی چند عنصر با FindAll در سی شارپ
گاهی لازم است تمام عناصر مطابق یک شرط را پیدا کنیم، نه فقط اولین مورد را .در این شرایط، متد FindAll کاربرد دارد.
این متد تمام عناصر مطابق شرط را در قالب یک لیست جدید برمیگرداند.
List<int> numbers = new List<int>
{
5, 10, 15, 20, 25, 30
};
List<int> results = numbers.FindAll(x => x >= 15);
foreach (int number in results)
{
Console.WriteLine(number);
}
خروجی:
15
20
25
30
در این مثال، تمام اعدادی که بزرگتر یا مساوی ۱۵ هستند، در لیست جدید قرار میگیرند.
استفاده از FindAll زمانی مفید است که بخواهیم دادهها را بر اساس یک یا چند شرط فیلتر کنیم.
پیدا کردن اندیس عنصر با FindIndex در سی شارپ
گاهی دانستن مقدار یک عنصر کافی نیست و لازم است موقعیت آن را نیز در لیست مشخص کنیم.برای این کار میتوان از متد FindIndex استفاده کرد.
List<int> numbers = new List<int>
{
10, 20, 30, 40, 50
};
int index = numbers.FindIndex(x => x == 30);
Console.WriteLine(index);
خروجی:
2
در این مثال، عدد ۳۰ در اندیس ۲ قرار دارد؛ زیرا اندیس عناصر در لیست سیشارپ از صفر شروع میشود.
اگر هیچ عنصری مطابق شرط پیدا نشود، متد FindIndex مقدار -1 را برمیگرداند.
بنابراین، بهتر است نتیجه آن را بررسی کنیم تا از اشتباه در پردازش دادهها جلوگیری شود.
جستجوی آخرین عنصر با FindLast
متد FindLast مشابه Find عمل میکند، با این تفاوت که آخرین عنصر مطابق شرط را از انتهای لیست پیدا میکند.List<int> numbers = new List<int>
{
10, 20, 30, 20, 40
};
int result = numbers.FindLast(x => x == 20);
Console.WriteLine(result);
خروجی:
20
در این مثال، عدد ۲۰ دو بار در لیست وجود دارد.
متد FindLast آخرین مورد مطابق شرط را پیدا میکند.
از آنجا که هر دو مقدار یکسان هستند، خروجی نیز ۲۰ خواهد بود.
برای تشخیص موقعیت آخرین عنصر مطابق شرط، میتوان از متد FindLastIndex استفاده کرد.
جستجو در لیست رشتهها
یکی از کاربردهای رایج جستجو در لیست، پیدا کردن رشتههایی است که شامل یک عبارت خاص هستند.برای این کار میتوان از متد Contains در کنار FindAll استفاده کرد.
List<string> names = new List<string>
{
"Ali",
"Alireza",
"Reza",
"Sara"
};
List<string> results =
names.FindAll(name => name.Contains("Ali"));
foreach (string name in results)
{
Console.WriteLine(name);
}
خروجی:
Ali
Alireza
در این مثال، تمام رشتههایی که عبارت Ali را در خود دارند، انتخاب میشوند.
توجه داشته باشید که مقایسه رشتهها با Contains بهصورت پیشفرض به بزرگی و کوچکی حروف حساس است.
اگر بخواهیم جستجو بدون حساسیت به حروف انجام شود، میتوانیم از روشهایی مانند IndexOf همراه با StringComparison.OrdinalIgnoreCase استفاده کنیم.
List<string> results = names.FindAll(
name => name.IndexOf(
"ali",
StringComparison.OrdinalIgnoreCase
) >= 0
);
جستجو در لیست اشیا
در برنامههای واقعی، معمولاً فقط با لیست اعداد و رشتهها کار نمیکنیم.ممکن است مجموعهای از اشیا مانند کاربران، محصولات یا سفارشها داشته باشیم.
در این شرایط نیز میتوان از متدهای جستجوی لیست استفاده کرد.
فرض کنید کلاس زیر برای نگهداری اطلاعات محصولات تعریف شده است:
class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
اکنون میتوانیم لیستی از محصولات ایجاد کرده و محصولی را بر اساس شناسه پیدا کنیم.
List<Product> products = new List<Product>
{
new Product { Id = 1, Name = "Laptop", Price = 500 },
new Product { Id = 2, Name = "Mouse", Price = 20 },
new Product { Id = 3, Name = "Keyboard", Price = 45 }
};
Product product = products.Find(p => p.Id == 2);
if (product != null)
{
Console.WriteLine(product.Name);
}
else
{
Console.WriteLine("Product not found");
}
خروجی:
Mouse
در این مثال، متد Find محصولی را پیدا میکند که شناسه آن برابر با ۲ باشد.
این روش برای جستجو در اطلاعات کاربران، کالاها و سایر موجودیتهای برنامه کاربرد زیادی دارد.
تفاوت Find و FirstOrDefault در سی شارپ
در سیشارپ، علاوه بر متدهای کلاس <List<T، میتوان از متدهای LINQ نیز برای جستجو استفاده کرد.یکی از متدهای پرکاربرد LINQ، متد FirstOrDefault است.
using System.Linq;
List<int> numbers = new List<int>
{
10, 20, 30, 40
};
int result = numbers.FirstOrDefault(x => x > 25);
Console.WriteLine(result);
خروجی:
30
هر دو متد Find و FirstOrDefault میتوانند اولین عنصر مطابق شرط را برگردانند.
با این حال، Find متد اختصاصی <List<T است، در حالی که FirstOrDefault برای انواع مجموعههایی که از LINQ پشتیبانی میکنند قابل استفاده است.
هنگام استفاده از LINQ باید فضای نام System.Linq در دسترس باشد.
همچنین، در هر دو روش، اگر عنصری پیدا نشود، مقدار پیشفرض نوع داده برگردانده میشود؛ بنابراین برای انواع مقداری مانند int بهتر است در صورت نیاز، وضعیت پیدا شدن نتیجه را جداگانه مدیریت کنیم.
نتیجهگیری
جستجو در لیست در سیشارپ یکی از مهارتهای مهم در توسعه برنامههای کاربردی است.کلاس <List<T متدهای متنوعی مانند Find، FindAll، FindIndex، FindLast و Contains را ارائه میدهد که هرکدام برای هدف مشخصی طراحی شدهاند.
با شناخت تفاوت این متدها میتوان اطلاعات موردنیاز را بهسادگی پیدا کرد، دادهها را فیلتر نمود و موقعیت عناصر را به دست آورد.
همچنین، استفاده از LINQ و ساختارهایی مانند Dictionary در شرایط مناسب میتواند انعطافپذیری و کارایی برنامه را افزایش دهد.




کاربران ما
شما هم نظرتون با ما دریاره “جستجو در لیست در سی شارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید