دیکشنری

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

اساطیر زبان

همه دیکشنری ها در سی شارپ، رابط 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 آشنا شوید ، که یک بار دیگر داده های آزمایشی ما برای مثالی در این آموزش شده اند. پدر، مادر و دوقلوهایشان جو و جنا. توجه کنید که چگونه دیکشنری را تعریف می کنیم تا از یک رشته به جای کلید (در این حالت، نام می باشد) و یک عدد صحیح برای مقدار (در این حالت؛ سن) استفاده کند. نکته جالب این است که این به ما اجازه می دهد تا به جای یک فهرست عددی، با استفاده از کلید (نام)، به یک آیتم دسترسی پیدا کنیم. همان طور که مشاهده می کنید که در عمل در آخرین خط مثال – بین مجموعه ای از براکت ها، ما به سادگی کلید را برای دسترسی به مقدار (سن) تعیین می کنیم.

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

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

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”);
}

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

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in,

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

1 دیدگاه. ارسال دیدگاه جدید

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

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

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست