1. ホーム
  2. スクリプト・コラム
  3. ゴラン

囲碁言語基本マップの使い方と例

2022-01-06 20:48:30

概要

  • map は、キーと値のペアに基づく順序不同のコレクションです
  • GoのMapは参照型です
  • 使用するには初期化する必要があります。

構文

宣言と初期化

makeで使用、それ以外はnilです。

var map[KeyType]ValueType
//KeyType:indicates the type of the key
//ValueType:indicates the type of the value corresponding to the key
make(map[KeyType]ValueType, [cap])
//cap represents the capacity of the map, this parameter is not required but we should specify a suitable capacity for the map when initializing it
//it will be automatically expanded when you exceed it


//1. Declaration
var name1 map[int]string //key is int,value is string
var name2 map[string]string //key is string,value is string
//literals
names3:=map[int]string{0:"Zhang San",1:"Li Si"}
//2. Allocate memory
name1 = make(map[int]string, 2) //2: the capacity of the map, when you exceed the capacity will automatically expand
name2 = make(map[string]string, 2)
//3. Assigning values
//3.1 Assigning values by KeyType
name1[0]="Zhang San" //key:0 value:Zhang San
name1[1]="李四" //key:1 value:李四
name1[2]="王五" //key:2 value:王五 //already exceeded the allocated capacity, will automatically expand
name2["A"]="Zhang San"
name2["B"]="李四"


読む

KeyTypeで読み取る

keyTypeが存在すればその値を返し、存在しなければ型のデフォルト値を返す

fmt.Println(name1[0])
fmt.Println(name2["B"])


キーとなる値がマップに存在するかどうかをテストする

KeyTypeで値を取ると、値と存在するかどうかのboolの2つの値が返されます。

if value, ok := name1[5]; ok {
	fmt.Println("This value exists",value)
} else {
	fmt.Println("This value does not exist", value)
}


削除

delete(map[int]string,[KeyType])


delete(name1 , 1)


イテレートスルー

range


for key,value:=range name1 {
	fmt.Printf("key=%d,value=%s\n",key,value)
}
for key,value:=range name2 {
	fmt.Printf("key=%s,value=%s\n",key,value)
}


概要

  1. mapはmakeの助けを借りてメモリ空間を確保しなければならず、そうでない場合はnilである。
  2. リテラル初期化はキーが一意であることを保証しなければならず、さもなければエラーとなる
  3. マップは参照渡しで、フォームパラメータが実パラメータの値を変更することを意味する
  4. マップオブジェクトに直接[]演算子を使用して取得したオブジェクトは、状態を直接変更することはできません。
  5. マップに構造体ではなくポインタを格納する

package main
import "fmt"
func main() {
	//I. Declare and initialize [use with make, otherwise nil]
	//1. declaration
	var name1 map[int]string //key is int,value is string
	var name2 map[string]string //key is string,value is string
	//2. Allocate memory
	name1 = make(map[int]string, 2) //2: the capacity of the map, when you exceed the capacity will automatically expand
	name2 = make(map[string]string, 2)
	//3. Assigning values
	//3.1 Assigning values by KeyType
	name1[0] = "Zhang San" //key:0 value:Zhang San
	name1[1] = "李四" //key:1 value:李四
	name1[2] = "王五" //key:2 value:王五 //already exceeded the allocated capacity, will automatically expand
	name2["A"] = "Zhang San"
	name2["B"] = "李四"
	// II. Read
	// 1. read according to KeyType, if the keyType exists, return that value, if not, return the type default value value
	fmt.Println(name1[0])
	fmt.Println(name2["B"])
	// 2. test whether the key value in the map exists [when the value is taken by KeyType, two values are returned, one is vlue and the other is a bool whether it exists]
	if value, ok := name1[2]; ok {
		fmt.Println("This value exists", value)
	} else {
		fmt.Println("This value does not exist", value)
	}
	// iii. delete
	delete(name1, 1) //deleted Li Si
	delete(name2, "C") //no such C
	fmt.Println(name1)
	fmt.Println(name2)
	// IV. Iteration
	for key,value:=range name1 {
		fmt.Printf("key=%d,value=%s\n",key,value)
	}
	for key,value:=range name2 {
		fmt.Printf("key=%s,value=%s\n",key,value)
	}
}



上記は、Go言語基本マップの使い方と例の詳細です。Go言語基本に関するより詳しい情報は、スクリプトハウスの他の関連記事にご注目ください