بهینه سازی عملیات جمع آوری در C#: واردات ، جستجو و مرتب سازی

مقدمه
کار با مجموعه ها به طور کارآمد سنگ بنای توسعه C# است. در این مقاله روشهای عملی برای رسیدگی به واردات ، جستجو و مرتب سازی داده ها ضمن در نظر گرفتن بهینه سازی عملکرد ، نشان می دهد. به جای تکیه بر وابستگی های خارجی مانند پرونده های CSV یا چارچوب هایی مانند WPF ، ما صرفاً روی منطق و مفاهیم کار با مجموعه ها تمرکز خواهیم کرد.
ما از یک مثال ساده استفاده خواهیم کرد: مدیریت لیستی از کشورها. بیایید از طریق تنظیم داده ها ، جستجوی کشورهای خاص ، مرتب سازی آنها و بهینه سازی عملکرد قدم بزنیم.
مرحله 1: مدل داده را تعریف کنید
برای شروع ، ما به Country
کلاس برای نشان دادن داده ها. این سه ویژگی خواهد داشت: نام ، کد و قاره کشور. علاوه بر این ، ما غلبه خواهیم کرد ToString
روش ارائه فرمت قابل خواندن برای نمایش.
public class Country
{
public string Name { get; set; }
public string Code { get; set; }
public string Continent { get; set; }
public override string ToString()
{
return $"{Name} ({Code}) - {Continent}";
}
}
مرحله 2: مجموعه را جمع کنید
به جای وارد کردن داده ها از یک پرونده خارجی ، ما یک لیست سخت از کشورها برای سادگی ایجاد خواهیم کرد.
var countries = new List<Country>
{
new Country { Name = "Germany", Code = "DEU", Continent = "Europe" },
new Country { Name = "United States", Code = "USA", Continent = "North America" },
new Country { Name = "India", Code = "IND", Continent = "Asia" },
new Country { Name = "Malta", Code = "MLT", Continent = "Europe" },
new Country { Name = "Japan", Code = "JPN", Continent = "Asia" }
};
-
چرا داده ها را سخت می کنید؟
- این امر تمرکز خود را بر روی عملیات مجموعه بدون معرفی پیچیدگی های استفاده از پرونده های خارجی حفظ می کند.
مرحله 3: جستجوی یک کشور
استفاده از جستجوی خطی (O (N))
یک رویکرد مشترک استفاده از List
روش ، که یک جستجوی خطی را از طریق لیست انجام می دهد.
public static Country GetCountryWithCode(string code, List<Country> countries)
{
if (code.Length != 3) return null; // Validate input length
return countries.Find(c => c.Code.Equals(code, StringComparison.OrdinalIgnoreCase));
}
مثال استفاده:
var country = GetCountryWithCode("IND", countries);
if (country != null)
{
Console.WriteLine($"Found: {country}");
}
else
{
Console.WriteLine("Country not found.");
}
-
بینش عملکرد:
-
Find
اجرا جستجوی خطی با پیچیدگی o (n). این برای مجموعه داده های کوچک خوب کار می کند اما می تواند برای مجموعه های بزرگتر کند شود.
-
مرحله 4: بهینه سازی جستجو با فرهنگ لغت
برای بهبود عملکرد جستجو ، از a استفاده کنید Dictionary
برای جستجوی زمان ثابت (O (1)).
var countryDict = countries.ToDictionary(c => c.Code);
public static Country GetCountryWithCode(string code, Dictionary<string, Country> countryDict)
{
countryDict.TryGetValue(code.ToUpper(), out var country);
return country;
}
مثال استفاده:
var optimizedCountry = GetCountryWithCode("USA", countryDict);
if (optimizedCountry != null)
{
Console.WriteLine($"Found: {optimizedCountry}");
}
else
{
Console.WriteLine("Country not found.");
}
-
سود عملکرد:
- استفاده از فرهنگ لغت به طرز چشمگیری زمان جستجو را کاهش می دهد و آن را برای مجموعه داده های بزرگ یا جستجوی مکرر ایده آل می کند.
مرحله 5: مرتب سازی مجموعه
با استفاده از linq OrderBy
:
برای مرتب سازی ، LINQ یک راه حل تمیز و ساده با OrderBy
روش
var sortedCountries = countries.OrderBy(c => c.Name).ToList();
مثال استفاده:
Console.WriteLine("Sorted Countries:");
foreach (var country in sortedCountries)
{
Console.WriteLine(country);
}
-
بینش عملکرد:
- مرتب سازی الگوریتم هایی مانند نمونه مورد استفاده در
OrderBy
به طور معمول دارای پیچیدگی O (n log n) است که برای اکثر سناریوها کارآمد است. - در حالی که
List.Sort
سریعتر است ، خوانایی و سادگی LINQOrderBy
یک انتخاب عالی برای عملیات یک بار.
- مرتب سازی الگوریتم هایی مانند نمونه مورد استفاده در
مرحله ششم: همه اینها را کنار هم قرار دهید
در اینجا کد مثال کامل ، ترکیب همه چیز:
using System;
using System.Collections.Generic;
using System.Linq;
public class Country
{
public string Name { get; set; }
public string Code { get; set; }
public string Continent { get; set; }
public override string ToString()
{
return $"{Name} ({Code}) - {Continent}";
}
}
class Program
{
static void Main()
{
// Step 2: Populate the collection
var countries = new List<Country>
{
new Country { Name = "Germany", Code = "DEU", Continent = "Europe" },
new Country { Name = "United States", Code = "USA", Continent = "North America" },
new Country { Name = "India", Code = "IND", Continent = "Asia" },
new Country { Name = "Malta", Code = "MLT", Continent = "Europe" },
new Country { Name = "Japan", Code = "JPN", Continent = "Asia" }
};
// Step 3: Search with linear search
var country = GetCountryWithCode("IND", countries);
Console.WriteLine(country != null ? $"Found: {country}" : "Country not found.");
// Step 4: Optimize search with dictionary
var countryDict = countries.ToDictionary(c => c.Code);
var optimizedCountry = GetCountryWithCode("USA", countryDict);
Console.WriteLine(optimizedCountry != null ? $"Found: {optimizedCountry}" : "Country not found.");
// Step 5: Sort the collection
var sortedCountries = countries.OrderBy(c => c.Name).ToList();
Console.WriteLine("Sorted Countries:");
foreach (var sortedCountry in sortedCountries)
{
Console.WriteLine(sortedCountry);
}
}
public static Country GetCountryWithCode(string code, List<Country> countries)
{
if (code.Length != 3) return null;
return countries.Find(c => c.Code.Equals(code, StringComparison.OrdinalIgnoreCase));
}
public static Country GetCountryWithCode(string code, Dictionary<string, Country> countryDict)
{
countryDict.TryGetValue(code.ToUpper(), out var country);
return country;
}
}
پایان
در این مقاله ، ما را پوشش دادیم:
- نحوه تعریف و جمع آوری یک مجموعه با یک ساده
Country
کلاس. - در جستجوی عناصر با استفاده از هر دو
List
وت.Find Dictionary
بشر - مرتب سازی مجموعه ها با استفاده از linq
OrderBy
بشر
با تمرکز بر روی عملکرد و کد تمیز ، می توانید مجموعه ها را به طور مؤثر در برنامه های خود اداره کنید. برای بهینه سازی پروژه های خود و درک عمیق تر از مجموعه های C# با این تکنیک ها آزمایش کنید!