بوت کمپ Kotlin برای برنامه نویسان اندروید درس پنج قسمت یک: درک مجموعه‌ها

۳.درک مجموعه‌ها (collections)در این تکلیف شما درباره مجموعه ها بیشتر می آموزید،که لیست‌ها، و یک نوع جدید از مجموعه به‌نام نگاشت مخلوط (hash maps) را شامل می‌شود.گام ۱: درباره لیست ها بیشتر یاد بگیرید۱. لیست ها و لیست های قابل تغییر پیش از این معرفی شدند. آن‌ها ساختار‌داده های بسیار کاربردی هستند، به این دلیل کاتلین تعدادی تابع توکار برای لیست ها ارائه می کند. فهرست جزئی توابع لیست را بررسی کنید. شما می توانید فهرست کامل مستندات برای لیست و لیست های قابل تغییر را در مستندات کاتلین پیدا کنید.add(element: E)یک مورد را به لیست قابل تغییر اضافه می‌کندremove(element: E) یک مورد را از لیست قابل تغییر حذف می‌کندreversed()یک نسخه از لیست را با عناصر به ترتیب وارونه برمی‌گرداندcontains(element: E)اگر لیست شامل مورد باشد یک true برمی‌گرداندsubList(fromIndex: Int, toIndex: Int)بخشی از لیست را باز می گرداند که از اولین شاخص شروع می‌شود اما شامل شاخص آخر نیست۲. همچنان با هسته ارتباطی REPL کار می‌کنید، یک لیست از اعداد بسازید و متد ()sum را روی آن صدا بزنید. این تمامی عناصر را با هم جمع می کند. val list = listOf(1, 5, 3, 4) println(list.sum()) ⇒ 13۳. یک لیست از رشته ها بسازید و آن را جمع کنید.val list2 = listOf(&quota&quot, &quotbbb&quot, &quotcc&quot)println(list2.sum())⇒ error: none of the following functions can be called with the arguments supplied:۴. اگر عنصر چیزی باشد که list نتواند به طور مستقیم جمع کند، مانند یک رشته، شما می توانید با استفاده از ()sumby. و یک تابع لامبدا مشخص کنید که چگونه آن را جمع کند، برای مثال برای جمع کردن طول رشته‌ها. نام پیش‌فرض یک آرگومان لامبدا it است و اینجا وقتی که لیست را می پیماییم it به هر عنصر از لیست اشاره دارد.val list2 = listOf(&quota&quot, &quotbbb&quot, &quotcc&quot)println(list2.sumBy { it.length }) ⇒ 6۵. کارهای بیشتری هست که می توانید با لیست انجام دهید. تنها راه برای دیدن عملکردهای قابل دسترس این است که یک لیست داخل InteliiJ IDEA بسازید، یک نقطه اضافه کنید و بعد به لیست کامل کردن خودکار در راهنمای ابزار نگاه کنید. این برای هر شی‌ای کار می کند. این را با list امتحان کنید.فهرست کامل کردن خودکار در راهنمای ابزاربرای دیدن عملکرد برای یک کلاس، یک شی داخل IntelliJ IDEA بسازید، یک نقطه پس از نام آن اضافه کنید، و بعد به فهرست کامل کننده خودکار درون راهنمای ابزار نگاه کنید. این برای همه شی‌ها کار می کند.۶. متد ()listIterator را از فهرست انتخاب کنید، و بعد با استفاده از عبارت for همه عناصر که با فاصله از هم جدا شدند را چاپ کنید.val list2 = listOf(&quota&quot, &quotbbb&quot, &quotcc&quot)for (s in list2.listIterator()) { println(&quot$s &quot)}⇒ a bbb cc گام ۲: از نگاشت مخلوط (hash maps) استفاده کنیددر کاتلین شما تقریباً می توانید هر چیزی را با استفاده از ()hashMapOf به چیز دیگری نگاشت کنید. نگاشت مخلوط به نوعی مانند یک لیست از جفت ها است، که مقدار اول به عنوان کلید عمل می‌کند.۱. یک نگاشت مخلوط بسازید که علائم، که کلیدها هستند و بیماری های ماهی، که مقادیر هستند را جور می‌کند. val cures = hashMapOf(&quotwhite spots&quot to &quotIch&quot, &quotred sores&quot to &quothole disease&quot)۲. سپس شما می توانید مقدار بیماری را بر اساس کلید علائم، با استفاده از متد ()get، یا حتی مختصر‌تر با براکت مربعی [‌ ] بازیابی کنید.println(cures.get(&quotwhite spots&quot)) ⇒ Ichprintln(cures[&quotred sores&quot])⇒ hole disease۳. یک علامت بیماری که در نگاشت وجود ندارد را امتحان کنید. println(cures[&quotscale loss&quot])⇒ null اگر یک کلید در نگاشت نباشد، تلاش برای بازگرداندن بیماری مطابق با مقدار null را برمی‌گرداند. بر اساس داده نگاشت شده، ممکن است هیچ همسانی برای یک کلید وجود نداشته باشد. برای این کاتلین تابع ()getOrDefault را ارائه می‌کند.۴. با استفاده از ()getOrDefault جستجو برای کلیدی که همسان ندارد را امتحان کنید.println(cures.getOrDefault(&quotbloating&quot, &quotsorry, I don't know&quot)) ⇒ sorry, I don't knowاگر نیاز دارید تا چیزی بیشتر از بازگرداندن یک مقدار انجام دهید، کاتلین تابع ()getOrElse را ارائه می‌کند.۵. کد را برای استفاده از ()getOrElse به جای ()getOrDefault تغییر دهید.println(cures.getOrElse(&quotbloating&quot) {&quotNo cure for this&quot})⇒ No cure for thisبه جای بازگرداندن یک مقدار پیش فرض ساده، کدی که درون آکولاد { } باشد اجرا می‌شود. در این مثال else فقط یک رشته بازمی‌گرداند، اما می توانست مثل پیدا کردن یک صفحه وب با یک درمان برای بیماری و بازگرداندن آن تجملی باشد.مانند لیست قابل تغییر (mutableListOf) شما می توانید یک نگاشت قابل تغییر (mutableMapOf) بسازید. یک نگاشت قابل تغییر به شما اجازه می دهد مورد ها را اضافه یا حذف کنید. Mutable یعنی قابل تغییر و immutable یعنی غیر قابل تغییر.۶. یک نگاشت از فهرست موجودی که قابل اصلاح باشد بسازید، که یک رشته ابزار را به تعداد موارد نگاشت می‌کند. آنرا با تور ماهی گیری (fish net) داخل آن بسازید، بعد با استفاده از ()put سه پودر تمیز کننده مخزن (tank scrubbers) به فهرست موجودی اضافه کنید، و بعد تور ماهی را با ()remove حذف کنید.val inventory = mutableMapOf(&quotfish net&quot to 1) inventory.put(&quottank scrubber&quot, 3) println(inventory.toString()) inventory.remove(&quotfish net&quot) println(inventory.toString())⇒ {fish net=1, tank scrubber=3}{tank scrubber=3}مجموعه های غیر قابل تغییر در فضای نخی (threaded) کاربردی هستند جایی که اگر نخ های مختلف به یک مجموعه دسترسی پیدا کنند ممکن است مشکلاتی ایجاد شود.بخش قبل | فهرست درس | بخش بعد