2016-07-20 8 views
-1

移動先にmap[string][2]intを作成します。私は試乗会でthisを試しましたが、エラーが発生しました。これをどうすれば解決できますか?Goにマップ[string] [2] intを作成する方法は?

fmt.Println("Hello, playground") 
m:= make(map [string][2]int) 
m["hi"]={2,3} 
m["heello"][1]=1 
m["hi"][0]=m["hi"][0]+1 
m["h"][1]=m["h"][1]+1 
fmt.Println(m) 

答えて

0

マップの初期化は正しいです。あなたが基本となる要素にアクセスする必要がない場合

m:= make(map [string][2]int) 
m["test"] = [2]int{1,3} 
fmt.Println(m) 

このアプローチの作品: あなたは明示的にマップの要素の型を宣言する必要があります。

あなたがこれを必要とする場合は、ポインタを使用する必要があります。

package main 

import (
    "fmt" 
) 

func main() { 
    fmt.Println("Hello, playground") 
    m := make(map[string]*[2]int) 
    m["hi"] = &[2]int{2, 3} 
    m["heello"] = &[2]int{0, 1} 
    m["hi"][0] = m["hi"][0] + 1 
    // commented out. Initialize it first 
    //m["h"][1]=m["h"][1]+1 
    fmt.Println(m) // 2 address 
    fmt.Println(m["hi"], m["heello"]) 
} 
+0

その後、配列を根底に値を割り当てるために割り当てることができません。それが必要な場合は、ポインタのマップを作成する必要があります。 – Nebril

+0

@nessunoありがとう、これは10行目の最初の問題を解決しますが、残りの部分も解決する必要があります。配列の特定の値にアクセスし、それに任意の解決策を追加する必要がありますか? –

+0

@Nebrilヒント – nessuno

0

あなたは配列のインデックスに値を割り当てることができるようにしたい場合は、配列へのポインタのマップを持っている必要があります。このコードをチェックしてください(配列として使用する前にすべてのマップキーを開始する必要があります)。

package main 

import (
    "fmt" 
) 

func Assign(m map[string]*[2]int, key string, index int, value int) { 
    if _, ok := m[key]; !ok { 
     m[key] = &[2]int{} 
    } 

    m[key][index] = value 
} 

func main() { 
    fmt.Println("Hello, playground") 

    m := make(map[string]*[2]int) 

    m["hi"] = &[2]int{2, 3} 
    m["h"] = &[2]int{4, 5} 

    //existing key 
    Assign(m, "h", 1, 4) 
    //new key 
    Assign(m, "howdy", 1, 3) 

    fmt.Println(m["hi"]) 
    fmt.Println(m["h"]) 
    fmt.Println(m["howdy"]) 

} 
+0

に感謝して私の答えを更新しましたが、m ["hi"] [0] = m ["hi"] [0] +1とmならば、例えばキーを定義せずに値を追加する必要があります["hi"] [0]が作成されていない場合、自動的にデフォルト値の0に設定されます。m ["hi"] [0] = 1 –

+0

@SaidSaifiキーを押し、必要に応じて新しい配列を作成します。これを行うために上記のコードを更新しました。 – Nebril

0

この問題を参照してください:https://github.com/golang/go/issues/3117

package main 

import (
    "fmt" 
) 

func main() { 
    fmt.Println("Hello, playground") 
    m := make(map[string][2]int) 

    m["hi"] = [2]int{2, 3} 

    m["heello"] = [2]int{} 

    var tmp = m["heello"] 
    tmp[1] = 1 
    m["heello"] = tmp 

    fmt.Println(m) 
} 
+0

ありがとうございますが、私は自分のキーをいつも定義したくありません。m ["hi"] [0] = m ["hi"] [0 ] +1であり、m ["hi"] [0]が作成されない場合、自動的にデフォルト値0に設定され、その後m ["hi"] [0] = 1 –

関連する問題