golang資料類型map

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

1 map簡介

    map是一堆索引值對的未排序集合,類似Python中字典的概念,它的格式為map[keyType]valueType,是一個key-value的hash結構。map的讀取和設定也類似slice一樣,通過key來操作,只是slice的index只能是int類型,而map多了很多類型,可以是int,可以是string及所有完全定義了==與!=操作的類型。
    在C++/Java中,map一般都以庫的方式提供,比如在C++中是STL的std::map<>,在Java中是Hashmap<>,在這些語言中,如果要使用map,事先要引用相應的庫。而在Go中,使用map不需要引入任何庫,並且用起來也更加方便。

2 map聲明

    聲明map的文法如下

var map變數名 map[key] value
    其中:key為鍵類型,value為實值型別

    例如:value不僅可以是標註資料類型,也可以是自訂資料類型

var numbers map[string] intvar myMap map[string] personInfo

    personInfo為自訂結構體,儲存個人資訊,定義如下

type personInfo struct {    ID string    Name string    Address string}

3 map初始化

    3.1 直接初始化(建立)

rating := map[string] float32 {"C":5, "Go":4.5, "Python":4.5, "C++":2 }myMap := map[string] personInfo{"1234": personInfo{"1", "Jack", "Room 101,..."},}

    3.2 通過make初始化(建立)

    Go語言提供的內建函數make()可以用於靈活地建立map。

    建立了一個鍵類型為string,實值型別為int的map
numbers := make(map[string] int)
    建立了一個鍵類型為string,實值型別為personInfo的map
myMap = make(map[string] personInfo)
    也可以選擇是否在建立時指定該map的初始儲存能力,如建立了一個初始儲存能力為5的map
myMap = make(map[string] personInfo, 5)

    建立後初始化如下:

numbers["one"] = 1 myMap["1234"] = personInfo{"1", "Jack", "Room 101,..."}

4 map元素尋找

    在Go語言中,map的尋找功能設計得比較精巧。判斷是否成功找到特定的鍵,不需要檢查取到的值是否為nil,只需查看第二個傳回值。要從map中尋找一個特定的鍵,可以通過下面的代碼來實現:

value, ok := myMap["1234"]if ok{    //處理找到的value}
5 map元素修改(賦值)

    5.1 直接修改

numbers["one"] = 11

    5.2 間接修改

    map是一種參考型別,如果兩個map同時指向一個底層,那麼一個改變,另一個也相應的改變。

numbersTest := numbersnumbersTest["one"] = "111"
    現在numbers["one"]的值變為"111"了。

6 map元素刪除

    Go語言提供了一個內建函數delete(),用於刪除容器內的元素。如

delete(number, "one")

    上面的代碼將從myMap中刪除鍵為“one”的索引值對。如果“one”這個鍵不存在,那麼這個調用將什麼都不發生,也不會有什麼副作用。但是如果傳入的map變數的值是nil,該調用將導致程式拋出異常(panic)。

7 執行個體代碼

package mainimport(    "fmt")type persionInfo struct{    ID string    Name string    Address string}func main(){    /*    //聲明一個map變數numbers,鍵名為string,值為int    var numbers map[string] int    //給map變數建立值,同時指定最多可以儲存3個int值    numbers = make(map[string] int, 3)    //map元素賦值    numbers["one"] = 1    numbers["two"] = 2    numbers["three"] = 3    */    //上面方式的簡寫方法    numbers := map[string] int{        "one": 1,        "two": 2,        "three": 3,    }        var myMap map[string] persionInfo    myMap = make(map[string] persionInfo)    myMap["persion1"] = persionInfo{"1", "Amiee", "Street 101"}    myMap["persion2"] = persionInfo{"2", "Beva", "Street 102"}    myMap["persion3"] = persionInfo{"3", "Cencey", "Street 103"}        /*    // 上面方式的簡寫方法    myMap := map[string] persionInfo{        "persion1": persionInfo{"1", "Amiee", "Street 101"},        "persion2": persionInfo{"2", "Beva", "Street 102"},        "persion3": persionInfo{"3", "Cencey", "Street 103"},    }    */        //map元素列印    fmt.Printf("%v\n", numbers)    fmt.Println(numbers)    fmt.Println(numbers["two"])    fmt.Println(myMap)    fmt.Println(myMap["persion1"])        //map元素尋找    p1, ok := myMap["persion1"]    if ok{        fmt.Println("Found persion1, name", p1.Name, ", info", p1 )    }else{        fmt.Println("Not Found persion1")    }        //map元素修改    //map是一種參考型別,如果兩個map同時指向一個底層,那麼一個改變,另一個也相應的改變。    numbersTest := numbers    numbersTest["one"] = 11    fmt.Println(numbers)       //map元素刪除    delete(numbers, "one")    fmt.Println(numbers)    }

   輸出結果如下

[root@localhost mygo]# go run  test.go map[one:1 two:2 three:3]map[one:1 two:2 three:3]2map[persion1:{1 Amiee Street 101} persion2:{2 Beva Street 102} persion3:{3 Cencey Street 103}]{1 Amiee Street 101}Found persion1, name Amiee , info {1 Amiee Street 101}map[one:11 two:2 three:3]map[two:2 three:3]

8 注意事項

    map是無序的,每次列印出來的map都會不一樣,它不能通過index擷取,而必須通過key擷取。
    map的長度是不固定的,也就是和slice一樣,也是一種參考型別。
    內建的len函數同樣適用於map,返回map擁有的key的數量。
    map的值可以很方便的修改,通過重新賦值即可。


<關鍵字:map make delete >

**********************************************************************************************
 轉載請註明出處:http://blog.csdn.net/jesseyoung/article/details/34949845
**********************************************************************************************

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.