<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                Go語言中 map 是一種特殊的數據結構,一種元素對(pair)的無序集合,pair 對應一個 key(索引)和一個 value(值),所以這個結構也稱為關聯數組或字典,這是一種能夠快速尋找值的理想結構,給定 key,就可以迅速找到對應的 value。 map 是引用類型,可以使用如下方式聲明: ``` var mapname map[keyType]valueType ``` - mapname 為 map 變量名 - keyType 為鍵類型 - valueType 為鍵對應的值類型 在聲明的時候不需要知道 map 的長度,因為 map 是可以動態增長的,未初始化的 map 的值是 nil,使用函數 len() 可以獲取 map 中 pair 的數目。 映射的鍵可以是任何值。這個值的類型可以是內置的類型,也可以是結構類型,只要這個值可以使用==、!= 運算符做比較。切片、函數以及包含切片的結構類型這些類型由于具有引用語義,不能作為映射的鍵,使用這些類型會造成編譯錯誤 ``` package main import "fmt" func main() { var map1 map[string]int map1 = map[string]int{"one": 1, "two": 2} var map2 = make(map[string]int) map2 = map1 // map也是一種引用類型,如果兩個map同時指向一個底層,那么一個改變,另一個也相應改變。 map2["two"] = 3 fmt.Printf("Map1 is: %v\n", map1) // Map1 is: map[one:1 two:3] fmt.Printf("Map2 is: %v\n", map2) // Map2 is: map[one:1 two:3] } ``` 注意:可以使用 make(),但不能使用 new() 來構造 map,如果錯誤的使用 new() 分配了一個引用對象,會獲得一個空引用的指針,相當于聲明了一個未初始化的變量并且取了它的地址: ``` map2 := new(map[string]int) ``` 接下來當我們調用 `map2["two"] = 3` 的時候,編譯器會報錯: ``` invalid operation: map2["two"] (type *map[string]int does not support indexing) ``` ## map遍歷 ``` package main import "fmt" func main() { var map1 map[string]int map1 = map[string]int{"one": 1, "two": 2, "three": 3} for key, val := range map1{ fmt.Printf("key is: %v --- val is: %v\n", key, val) } } ``` 只遍歷值可以使用`_`改為匿名變量的形式: ``` for _, val := range map{ ``` 只遍歷鍵可以直接忽略值: ``` for key := range map{ ``` map 是無序(存入的值和取出的值順序不一定一致)的如果需要特定順序的遍歷結果,正確的做法是先排序 ``` package main import ( "fmt" "sort" ) func main() { var map1 map[string]int map1 = map[string]int{"one": 1, "two": 2, "three": 3} map1["a"] = 0 map1["p"] = 4 var slice1 []string for key := range map1{ slice1 = append(slice1, key) } sort.Strings(slice1) fmt.Println(slice1) // [a one p three two] } ``` ## 刪除元素 使用 delete() 內建函數從 map 中刪除一組鍵值對,delete() 函數的格式如下: ``` delete(map, key) ``` ``` package main import ( "fmt" ) func main() { var map1 map[string]int map1 = map[string]int{"one": 1, "two": 2, "three": 3} delete(map1, "two") fmt.Printf("%v", map1) // map[one:1 three:3] } ``` **判斷鍵是否存在** ``` package main import ( "fmt" ) func main() { var map1 map[string]int map1 = map[string]int{"one": 1, "two": 2, "three": 3} value, exist := map1["one"] // 鍵存在 exist 為true, 否則為 false fmt.Println(exist) // true if exist{ fmt.Printf("%v", value) } } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看