آموزش دیکشنری ها در سی شارپ به زبان ساده

رتبه: 5 ار 1 رای SSSSS
دیکشنری ها در سی شارپ
نویسنده: تیم تولید محتوا زمان مطالعه 4 دقیقه

همه دیکشنری ها در سی شارپ، رابط IDictionary را پیاده سازی می کنند. چندین نوع دیکشنری وجود دارد؛ اما متداول ترین آنها؛ دیکشنری جنریک (عمومی) می باشد، که معمولاً از آن به عنوان <TKey,TValue> یاد می شود- یک دیکشنری مجموعه ای از کلید ها و مقادیر را در بر می گیرد؛ که در تشبیه به دیکشنری کلید؛ نقش کلمه و مقدار نقش معنی را بازی می کند. تفاوت بین لیست و دیکشنری را می توان به شرح زیر بیان کرد: آیتم های موجود در یک لیست؛ با یک ترتیب معین می آیند و می توان با یک ایندکس عددی به آنها دست پیدا کرد؛ در حالی که آیتم های موجود در یک دیکشنری با یک کلید خاص ذخیره می شوند که می تواند برای بازیابی دوباره آیتم ها مورد استفاده قرار بگیرد.

در این آموزش بیشتر به این موضوع پرداخته ایم که همه ی دیکشنری ها در چه مورد هستند؛ اما ابتدا؛ بیایید نگاهی به این مثال ساده بیندازیم؛ تا نشان دهیم که دیکشنری ها به چه کاری می آیند.

Dictionary<string, int> users = new Dictionary<string, int>();
users.Add(“John Doe”, 42);
users.Add(“Jane Doe”, 38);
users.Add(“Joe Doe”, 12);
users.Add(“Jenna Doe”, 12);

Console.WriteLine(“John Doe is ” + users[“John Doe”] + ” years old”);

با خانواده Doe آشنا شوید ، که یک بار دیگر داده های آزمایشی ما برای مثالی در این آموزش شده اند. پدر، مادر و دوقلوهایشان جو و جنا. توجه کنید که چگونه دیکشنری را تعریف می کنیم تا از یک رشته به جای کلید (در این حالت، نام می باشد) و یک عدد صحیح برای مقدار (در این حالت؛ سن) استفاده کند. نکته جالب این است که این به ما اجازه می دهد تا به جای یک فهرست عددی، با استفاده از کلید (نام)، به یک آیتم دسترسی پیدا کنیم. همان طور که مشاهده می کنید که در عمل در آخرین خط مثال – بین مجموعه ای از براکت ها، ما به سادگی کلید را برای دسترسی به مقدار (سن) تعیین می کنیم.

در اینجا دو چیز مهم وجود دارد که باید بدانید: اول از همه ، کلید باید خاص باشد. در این حالت، در جایی که ما از یک رشته به عنوان کلید استفاده می کنیم ، بدین معنی است که شما نمی توانید دو کاربر را با یک نام مشابه اضافه کنید. این ویژگی بسیار خوبی است، زیرا وقتی می توانید از کلید برای ارجاع به یک مورد استفاده کنید، کلید فقط می تواند به یک مقدار اشاره کند. از طرف دیگر ، این مثال بسیار ساده است ، زیرا بدیهی است که شما نمی توانید مجموعه ای از کاربران را در اختیار داشته باشید که اسامی تکراری در آن وجود نداشته باشد، اما اکنون با ما همراه باشید تا مثال های بیشتری بزنیم.

نکته دیگر این که باید هنگام دستیابی به مقادیر یک دیکشنری به خاطر بسپارید، این است که وقتی سعی می کنید به مقدار یک کلید دسترسی پیدا کنید، آن کلید باید در مجموعه وجود داشته باشد. مثال ما چون کوچک بود از این نظر کاملاً قابل بررسی است زیرا کنترل کامل آنچه در آن لیست قرار دارد؛ در این مثال بسیار ساده است ولی در بیشتر شرایط، همیشه قبل از تلاش برای استفاده از کلید، باید بررسی کنید که آیا این کلید در لیست تان وجود دارد یا خیر. مثال زیر را در نظر بگیرید:

چرب زبان

برنامه نویسی سی شارپ رو قورت بده! بدون کلاس، سرعت 2 برابر، ماندگاری 3 برابر، پولسازی با ساخت اپلیکیشن، توسعه وب ... دانلود:

پک کامل سی شارپ

پک مبانی برنامه نویسی (اختیاری)

string key = “John Doe”;
if(users.ContainsKey(key))
Console.WriteLine(“John Doe is ” + users[key] + ” years old”);

اگر سعی کنید کلیدی را به لیست اضافه نمایید که در حال حاضر وجود دارد؛ یا اگر بخواهید با استفاده از کلیدی که در لیست وجود ندارد؛ به یک مقدار دست پیدا کنید؛ دات نت خطا می دهد. این ممکن است واضح به نظر برسد ، اما هر دو در واقع اتفاقات استثنائی هستند که در سرتاسر جهان یافت می شوند.

کار با آیتم ها

دسترسی به یک آیتم واحد می تواند بسیار کاربردی باشد؛ اما اگر بخواهید در یک مجموعه از حلقه استفاده کنید و مثلاً به دنبال یک آیتم خاص باشید؛ چه می شود؟ در آن مورد؛ اولین چیزی که باید از آن آگاه باشید آن است که آیتم های موجود در لیست به وضوح فقط یک شیء ساده نیستند؛ در عوض؛ دیکشنری آیتم هایی را در اختیار دارد که از نوع <KeyValuePair<TKey,TValue می باشد. T در واقع نشان دهنده آیتم هایی است که باید برای بیان کردن لیست استفاده شود- در این مورد یک رشته و یک عدد صحیح می باشد. بنابر این؛ حلقه زدن در مجموعه با حلقه foreach چیزی شبیه زیر می باشد.

Dictionary<string, int> users = new Dictionary<string, int>()
{
{ “John Doe”, 42 },
{ “Jane Doe”, 38 },
{ “Joe Doe”, 12 },
{ “Jenna Doe”, 12 }
};
foreach (KeyValuePair<string, int> user in users)
{
Console.WriteLine(user.Key + ” is ” + user.Value + ” years old”);
}

اولین چیزی که متوجه آن خواهید شد؛ آن است که من از فرصت، برای تغییر روش مقدار دهی اولیه دیکشنری استفاده کرده ام و به جای اضافه کردن هر آیتم بعد از نمونه سازی دیکشنری به صورت دستی؛ ما از سینتکس مقدار دهی اولیه مجموعه استفاده کرده ایم که در مقاله قبلی توضیح داده شد.

با استفاده از آن، ما اکنون همان دیکشنری که مانند گذشته است را داریم – بیایید در آن یک حلقه به کار ببریم. همانطور که مشاهده می کنید، من از یک حلقه foreach استفاده می کنم و نوع آیتمی را که انتظار دارم به عنوان <KeyValuePair <string,int اعلام کردم – که دقیقاً دو نوع مشابه برای بیان دیکشنری است. اکنون می توانیم هم به کلید و هم به مقدار (نام و سن) برای هر آیتم دسترسی پیدا کنیم و از آن استفاده می کنیم تا یک رشته ساده از اطلاعات مربوط به شخص را برای کنسول تولید کنیم.

ترتیب آیتم ها

مثال بالا؛ یک نکته بسیار مهم را برای ما روشن می کند: برخلاف یک لیست، که در آن ترتیب اصلی آیتم ها با استفاده از ایندکس های عددی تعیین می شود، ترتیب آیتم های موجود در یک دیکشنری غیر قطعی است – حتی زمانی که به صورت دستی؛ هر آیتم را منحصراً اضافه می کنید؛ به سادگی نمی توانید به موارد موجود اعتماد کنید. مطمئناً، هنگامی که نمونه فوق را اجرا کردید، احتمالاً تجربه خواهید کرد که آیتم ها دقیقاً به همان روشی که ما اضافه کردیم؛ قرار گرفته اند، اما این تضمین شده نیست و زمانی که آیتم های بیشتری را به دیکشنری اضافه کنید؛ یا برخی آیتم ها را حذف کنید؛ ترتیب قرار گیری آنها تغییر می کند.

کلاس دیکشنری با متد ()Sort مرتب سازی نمی شود؛ زیرا در پایان؛ حتی اگر آن را مرتب نیز بکنید؛ به محض این که یک بخواهید دوباره با دیکشنری کار کنید؛ ترتیب آن به هم می خورد. شما می توانید از متدهای ()OrderBy و ()OrderByDecending از LINQ استفاده کنید (جزئیات بیشتر در فصل های دیگر آورده شده است) تا به یک کپی مرتب شده از دیکشنری دست یابید. این امر همچنین به شما اجازه می دهد که آیتم ها را یا بر اساس کلید یا بر اساس مقدار مرتب سازی کنید؛ که این امر میتواند در مثال ما مفید باشد؛ تا بتوانیم فهرست کاربرها را به ترتیب سن شان به دست آوریم:

Dictionary<string, int> users = new Dictionary<string, int>()
{
{ “John Doe”, 42 },
{ “Jane Doe”, 38 },
{ “Joe Doe”, 12 },
{ “Jenna Doe”, 12 }
};
foreach (KeyValuePair<string, int> user in users.OrderBy(user => user.Value))
{
Console.WriteLine(user.Key + ” is ” + user.Value + ” years old”);
}

اگر مثال را اجرا کنید؛ خواهید دید که حتی اگر دیکشنری با آیتمهای مرتب شده بیان شود؛ می توانیم آن ها را بر اساس ویژگی دیگری مرتب سازی کنیم. به یاد داشته باشید که شما مسئول اطمینان حاصل کردن از این موضوع هستید که آیتم ها را بر حسب ترتیبی دریافت کنید که بخواهید؛ زیرا چارچوب دات نت همان طور که متناسب به نظر برسد؛ آیتم ها را ذخیره می کند.

profile name
تیم تولید محتوا

بخندید کتاب بخونید و خوب باشید تا جامعه مون به آرامش برسه. لطفا ! هر سوالی دارید در بخش نظرات مطرح کنید. ما یا سایر هموطنان عزیز پاسخ خواهیم داد. برای کمک به سایت ما و گسترش آموزش در بین هموطنان، در سایتها، وبلاگ ها و شبکه های اجتماعی لینک سایت ما را درج کنید.

مطالب پیشنهادی برای شما

محصولات مرتبط

مشاهده همه

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

1 2 3 4 5

1 نظر درباره «آموزش دیکشنری ها در سی شارپ به زبان ساده»

  • احمدرضا
    احمدرضا آیا این دیدگاه مفید بود ؟

    دمت گرم داداش توضیحاتت کامل بود

    پاسخ
مشاهده همه نظرات
سبد خرید
سبد خرید شما خالی است
× جهت نصب روی دکمه زیر در گوشی کلیک نمائید
آی او اس
سپس در مرحله بعد برروی دکمه "Add To Home Screen" کلیک نمائید