1

map[int]stringがあり、次のように定義したいとしましょう。

var a map[int]string =  {
 1: "some"
 3: "value"
 4: "maintained"
 7: "manually"
 // more 100 entries...
}

パターンはありませんが、キーにはパターンがあるため、値を手動で維持したいと思います。を使用して列挙値を処理するのと同じように、キー リストを維持する方法はあります1 << 1 + iotaか?

定義されたシーケンスでキーを作成するための同様にエレガントな方法がある場合に限り、 iota をマップキーとして使用できるかどうかを尋ねているわけではありません (残念ながら、それは私の知る限りではありません)。

4

2 に答える 2

3

最善の策は、順序付けされた値をスライスとして保存し、init 関数を使用して次のようなマップを生成することです。

var a map[int]string
var vals = []string{
    "some",
    "value",
    "maintained",
    "manually",
}

func init() {
    a = make(map[int]string)
    for idx, val := range vals {
        a[idxToKey(idx)] = val
    }
}

func idxToKey(i int) int {
    return 1<<1 + i
}

Go Playgroundで実行します。

idxToKey好きなように変身できます。この場合、あなたが与えたものを使用しましたが、それは何でもかまいません。iota引数は、通常キーワードを置く場所に移動します。

于 2014-12-07T04:11:02.897 に答える
1

1 つの方法は、すべての単語の配列/スライスを持ち、これと同様にループすることです。

var words []string
var a map[int]string

for i, v := range words {
   a[1 << 1 + i] = v
}
于 2014-12-07T04:07:53.920 に答える