2016-07-26 55 views
4

在Golang中是否有將切片轉換爲地圖的簡單方法?就像在Perl中將數組轉換爲哈希一樣,使用%hash = @array 這樣的簡單賦值很容易,上面這個將把數組中的所有元素轉換爲哈希,其中鍵是偶數索引元素,而值將是奇數索引元素的陣列。Golang:將切片轉換爲地圖

在我的Go代碼中,我有字符串切片,並希望將其轉換爲地圖。我想知道是否有Go的庫代碼來做到這一點。

func main() { 
    var elements []string 
    var elementMap map[string]string 
    elements = []string{"abc", "def", "fgi", "adi"} 
} 

元素切片應該轉換成字符串圖elementMap

感謝

回答

3

使用for循環:

elements = []string{"abc", "def", "fgi", "adi"} 
elementMap := make(map[string]string) 
for i := 0; i < len(elements); i +=2 { 
    elementMap[elements[i]] = elements[i+1] 
} 

runnable example on the playground

沒有標準庫函數來做到這一點。

1

目前沒有辦法perl的方式。您只需迭代切片,然後將切片元素放置在地圖中,例如作爲地圖的關鍵:

func main() { 
    var elements []string 
    var elementMap map[string]string 
    elements = []string{"abc", "def", "fgi", "adi"} 

    // initialize map 
    elementMap = make(map[string]string) 

    // put slice values into map 
    for _, s := range elements { 
     elementMap[s] = s 
     // or just keys, without values: elementMap[s] = "" 
    } 

    // print map 
    for k := range elementMap { 
     fmt.Println(k) 
    } 
} 

取決於你想做什麼,你必須保持一件事記住:地圖鍵是唯一的,所以如果你的片包含重複的字符串,你可能想使用,以保持計數map[string]int

func main() { 
    var elements []string 
    var elementMap map[string]int 
    elements = []string{"abc", "def", "fgi", "adi", "fgi", "adi"} 

    // initialize map 
    elementMap = make(map[string]int) 

    // increment map's value for every key from slice 
    for _, s := range elements { 
     elementMap[s]++ 
    } 

    // print map 
    for k, v := range elementMap { 
     fmt.Println(k, v) 
    } 
} 

而你總是可以包裝在FUNC這個功能:

func sliceToStrMap(elements []string) map[string]string { 
    elementMap := make(map[string]string) 
    for _, s := range elements { 
     elementMap[s] = s 
    } 
    return elementMap 
} 

func sliceToIntMap(elements []string) map[string]int { 
    elementMap := make(map[string]int) 
    for _, s := range elements { 
     elementMap[s]++ 
    } 
    return elementMap 
}