2016-07-26 33 views
4

スライスをGolangのマップに変換する簡単で簡単な方法はありますか? のような簡単な代入で簡単に配列をハッシュに変換すると、配列内のすべての要素がハッシュに変換され、キーは偶数番号のインデックス要素になり、値は奇数番号のインデックス要素になります配列の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 
} 
関連する問題