برنامه نویسی

بهینه سازی عملیات جمع آوری در 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.Find روش ، که یک جستجوی خطی را از طریق لیست انجام می دهد.

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 سریعتر است ، خوانایی و سادگی LINQ OrderBy یک انتخاب عالی برای عملیات یک بار.

مرحله ششم: همه اینها را کنار هم قرار دهید

در اینجا کد مثال کامل ، ترکیب همه چیز:

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;
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


پایان

در این مقاله ، ما را پوشش دادیم:

  1. نحوه تعریف و جمع آوری یک مجموعه با یک ساده Country کلاس.
  2. در جستجوی عناصر با استفاده از هر دو List.Find وت Dictionaryبشر
  3. مرتب سازی مجموعه ها با استفاده از linq OrderByبشر

با تمرکز بر روی عملکرد و کد تمیز ، می توانید مجموعه ها را به طور مؤثر در برنامه های خود اداره کنید. برای بهینه سازی پروژه های خود و درک عمیق تر از مجموعه های C# با این تکنیک ها آزمایش کنید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا