Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

edit: map / remove some inappropriate changes from last PR(s) #350

Merged
merged 1 commit into from
Apr 3, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 39 additions & 34 deletions content/chapter 1/1.10-map.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ map[KeyType]ValueType
````
کلمه کلیدی `map` و بعد نوع کلید و در آخر هم نوع مقدار تعریف می‌شود.
- کلید: برای اشاره به یک مقدار ذخیره شده، نیاز به یک نام‌ داریم و این یعنی «کلید» آن مقدار.
- مقدار کلید در یک مپ، باید {{< tooltip text="یکتا" note="unique" >}} باشد.
- محدودیت: برای تعریف کلید، از انواع تایپ‌هایی که {{< tooltip text="قابل مقایسه" note="comparable " >}} هستند، می‌توان استفاده کرد:
- Boolean(s)
- Number(s)
Expand Down Expand Up @@ -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, ...}
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -329,8 +332,9 @@ func main() {

## 1.10.9 پیمایش روی مپ

یکی از اصلی‌ترین اهداف ایجاد و نگهداری انواع تایپ‌های مربوط به مجموعه داده‌ها `... map and `، امکان دسترسی به اجزای آن‌ها با استفاده از لوپ‌ها `در گولنگ فقط for-loop` است.
با استفاده از for-range می‌توان به اجزای یک داده‌ از نوع کلید-مقدار دسترسی داشت. به مثال زیر توجه کنید:
یکی از اصلی‌ترین اهداف ایجاد و نگهداری انواع تایپ‌های مربوط به مجموعه داده‌ها، امکان دسترسی به اجزای داده و انواع لوپ از ابزارهای آن است.
با استفاده از for-range می‌توان به اجزای یک داده‌ از نوع کلید-مقدار دسترسی داشت

```go
package main

Expand Down Expand Up @@ -421,7 +425,8 @@ func main() {

## 1.10.11 خودآزمون

کد زیر را بررسی کنید و خروجی(های) آن را با در ذهن محاسبه کنید. سپس صحت آن(ها) را بررسی و درباره آن تحقیق کنید:
کد زیر را بررسی کنید و خروجی(های) آن را با ذهن خود پردازش کنید. سپس صحت آن(ها) را بررسی و درباره آن تحقیق کنید:

```go
package main

Expand Down
Loading