تعریف یک مجموعه معمولاً شامل یک جاینگهدار درون پرانتزهای زاویهای است که طبق قرارداد اغلب T نامیده میشود. به چنین مجموعهای «نوع جنریک» میگویند. این به کاربر مجموعه اجازه میدهد مشخص کند چه نوع عنصری را در مجموعه ذخیره کند. در کد نمونهی زیر، یک لیست از رشتهها نمونهسازی میکنیم.
لیست در C# مجموعهای از مقادیر اولیه یا نمونههایی از ساختارها یا کلاسهاست. لیست در کتابخانهی کلاس پایه بهصورت List<T> پیادهسازی شده است که در آن T نوع عنصر درون لیست است. API مجموعهی غنیای از متدها را برای ساختن و دستکاری لیستها در اختیار میگذارد.
میتوان به لیستها عنصر اضافه کرد و از آنها حذف کرد. لیستها بسته به نیاز بزرگ و کوچک میشوند.
var listOfStrings = new List<string>();
در این تمرین کدی مینویسید که فهرستی از زبانهای برنامهنویسی را که میخواهید در Exercism یاد بگیرید، پیگیری کند.
نه کار در پیش دارید که همهشان با فهرستها سر و کار دارند.
برای پیگیری زبانهایی که میخواهید یاد بگیرید، باید یک فهرست جدید بسازید.
متد استاتیک Languages.NewList() را پیادهسازی کنید که یک فهرست جدید و خالی برمیگرداند.
Languages.NewList()
// => empty list
در حال حاضر، تکه کاغذی دارید که زبانهایی را که میخواهید یاد بگیرید فهرست کرده است: C#، Clojure و Elm.
لطفاً متد استاتیک Languages.GetExistingLanguages() را پیادهسازی کنید تا این فهرست را برگرداند.
Languages.GetExistingLanguages();
// => {"C#", "Clojure", "Elm"}
همانطور که Exercism را کاوش میکنید و زبانهای جالبتری پیدا میکنید، میخواهید آنها را به فهرستتان اضافه کنید.
تابع استاتیک Languages.AddLanguage() را پیادهسازی کنید تا یک زبان جدید به انتهای فهرستتان اضافه کنید.
Languages.AddLanguage(Languages.GetExistingLanguages(), "VBA");
// => {"C#", "Clojure", "Elm", "VBA"}
شمردن زبانها یکییکی دردسر دارد.
متد استاتیک Languages.CountLanguages() را پیادهسازی کنید تا تعداد زبانهای فهرستتان را بشمارید.
Languages.CountLanguages(Languages.GetExistingLanguages())
// => 3
متد استاتیک Languages.HasLanguage() را پیادهسازی کنید تا بررسی کنید آیا زبانی وجود دارد.
Languages.HasLanguage(Languages.GetExistingLanguages(), "Elm")
// => true
یک جایی متوجه میشوید که فهرستتان در واقع برعکس مرتب شده است!
متد استاتیک Languages.ReverseList() را پیادهسازی کنید تا فهرستتان را برعکس کنید.
Languages.ReverseList(Languages.GetExistingLanguages())
// => {"Elm", "Clojure", "C#"}
با اینکه همهی زبانها را دوست دارید، C# جایگاه ویژهای در قلب شما دارد. به همین دلیل، اگر یکی از شرطهای زیر برقرار باشد، از یک فهرست زبان واقعاً هیجانزده میشوید:
متد استاتیک Languages.IsExciting() را پیادهسازی کنید تا بررسی کنید که یک فهرست زبان هیجانانگیز است یا نه:
Languages.IsExciting(Languages.GetExistingLanguages())
// => true
لطفاً متد استاتیک Languages.RemoveLanguage() را پیادهسازی کنید تا زبانی مشخص را از فهرست حذف کنید.
Languages.RemoveLanguage(Languages.GetExistingLanguages(), "Clojure")
// => { "C#", "Elm" }
لطفاً متد استاتیک Languages.IsUnique() را پیادهسازی کنید تا بررسی کنید که آیا هیچیک از زبانها در فهرست تکرار شده است.
تضمین میشود که فهرست زبانها (یعنی پارامتر) هنگام فراخوانی این متد خالی نباشد و تغییر فهرست اهمیتی ندارد.
Languages.IsUnique(Languages.GetExistingLanguages())
// => true