diff --git a/content/chapter 1/1.10-map.md b/content/chapter 1/1.10-map.md index 6ed66d1b7..84cc41a31 100644 --- a/content/chapter 1/1.10-map.md +++ b/content/chapter 1/1.10-map.md @@ -16,6 +16,7 @@ map[KeyType]ValueType ```` کلمه کلیدی `map` و بعد نوع کلید و در آخر هم نوع مقدار تعریف می‌شود. - کلید: برای اشاره به یک مقدار ذخیره شده، نیاز به یک نام‌ داریم و این یعنی «کلید» آن مقدار. + - مقدار کلید در یک مپ، باید {{< tooltip text="یکتا" note="unique" >}} باشد. - محدودیت: برای تعریف کلید، از انواع تایپ‌هایی که {{< tooltip text="قابل مقایسه" note="comparable " >}} هستند، می‌توان استفاده کرد: - Boolean(s) - Number(s) @@ -56,7 +57,7 @@ map[string]map[int]string ## 1.10.3 ایجاد و مقداردهی اولیه -مقدار پیش‌فرض برای یک مپ nil است. برای مقداردهی مپ‌ ها از روش‌های زیر استفاده می‌شود: +مقدار پیش‌فرض برای یک مپ nil می‌باشد. برای مقداردهی مپ‌ ها از روش‌های زیر استفاده می‌شود: - استفاده از کلمه کلیدی var ```go var sampleMap = map[keyType]valueType{keyName1:value1, keyName2:value2, ...} @@ -229,42 +230,44 @@ func delete(m map[Type]Type1, key Type) ## 1.10.7 بررسی وجود کلید -به کد زیر توجه کنید: -```go -package main - -import "fmt" - -func main() { - x := make(map[string]int) - a := x["num"] - fmt.Println(a) // 0 - - x["num"] = 0 - b := x["num"] - fmt.Println(b) // 0 -} -``` -در حالت اول کلید 'num' وجود نداشت و مقدار 0 چاپ شد. در حالت دوم مقدار 0 به کلید 'num' نسبت داده شده و همان مقدار 0 چاپ شد. حال ممکن است موقعیتی پیش بیاید که لازم باشد بدانیم که آیا یک کلید وجود دارد یا نه. در این صورت به جای یک متغیر، از دو متغیر برای جستجو در مپ استفاده می‌کنیم: + +یکی از خدماتی که مپ ارائه می‌دهد،‌ پاسخ به سوال وجود یک کلید خاص در مپ می‌باشد که به‌عنوان راهکاری برای حل مسائل از آن استفاده می‌شود. مثال زیر را ببینید: + ```go -package main - -import "fmt" - -func main() { - x := make(map[string]int) - a, ok := x["num"] - fmt.Println(a, ok) // 0 false - - x["num"] = 0 - b, ok := x["num"] - fmt.Println(b, ok) // 0 true +package main + +import "fmt" + +func main() { + + var personData = map[string]string{"name": "frank", "family": "colleti", "dob": "1970-05-12"} + + name, nameExist := personData["name"] + family, familyExist := personData["family"] + dob, dobExist := personData["dob"] + organization, organizationExist := personData["organization"] + + fmt.Println(name, nameExist) + //frank true + fmt.Println(family, familyExist) + //colleti true + fmt.Println(dob, dobExist) + //1970-05-12 true + fmt.Println(organization, organizationExist) + // false } + + ``` +- این روش بیشتر به اسم `comma, ok` شناخته می‌شود و بسیاری از توابع چه در کتابخانه استاندارد و چه کتابخانه‌های عمومی در گولنگ، از این نوع نام‌گذاری برای برگشت دادن مقدار و ارور پشتیبانی می‌کنند. +- در مثال بالا تمامی متغیرهایی که با `Exist` تمام می‌شوند برای برسی وجود و عدم وجود یک کلید در `مپ` استفاده می‌شوند، به این صورت که اگر مقدار مشخص شده در `مپ` وجود داشت مقدار برگشتی در این متغیرها `true` خواهد بود و در غیر این صورت مقدار برگشتی `false`. + +{{< playground url=55Ga1f_c8Fz >}} + ## 1.10.8 مپ، یک جدول، یک منبع -وقتی یک مپ تعریف می‌شود، اگر مپ(های) دیگری از روی آن ساخته شود، دارای یک منبع `(بهش میگن reference type)` برای ذخیره و دریافت اطلاعات خواهند بود. در مثال زیر، مپ `editorMap` از مپ `companyProfile` ایجاد و وقتی ویرایش می‌شود، مپ اصلی **نیز**،‌ ویرایش می‌شود. +وقتی یک مپ تعریف می‌شود، اگر مپ(های) دیگری از روی آن ساخته شود، دارای یک منبع `(reference type)` برای ذخیره و دریافت اطلاعات خواهند بود. در مثال زیر، مپ `editorMap` از مپ `companyProfile` ایجاد و وقتی ویرایش می‌شود، مپ اصلی **نیز**،‌ ویرایش می‌شود. ```go package main @@ -329,8 +332,9 @@ func main() { ## 1.10.9 پیمایش روی مپ -یکی از اصلی‌ترین اهداف ایجاد و نگهداری انواع تایپ‌های مربوط به مجموعه داده‌ها `... map and `، امکان دسترسی به اجزای آن‌ها با استفاده از لوپ‌ها `در گولنگ فقط for-loop` است. -با استفاده از for-range می‌توان به اجزای یک داده‌ از نوع کلید-مقدار دسترسی داشت. به مثال زیر توجه کنید: +یکی از اصلی‌ترین اهداف ایجاد و نگهداری انواع تایپ‌های مربوط به مجموعه داده‌ها، امکان دسترسی به اجزای داده و انواع لوپ از ابزارهای آن است. +با استفاده از for-range می‌توان به اجزای یک داده‌ از نوع کلید-مقدار دسترسی داشت + ```go package main @@ -421,7 +425,8 @@ func main() { ## 1.10.11 خودآزمون -کد زیر را بررسی کنید و خروجی(های) آن را با در ذهن محاسبه کنید. سپس صحت آن(ها) را بررسی و درباره آن تحقیق کنید: +کد زیر را بررسی کنید و خروجی(های) آن را با ذهن خود پردازش کنید. سپس صحت آن(ها) را بررسی و درباره آن تحقیق کنید: + ```go package main