2

編集:ジェレミーウォールは、私が意図したよりも具体的な質問をしたことに気付くのを助けてくれました。これがより良いバージョンです。

あるタイプBの値を、等式が定義されているあるタイプAの値のシーケンスに関連付けるテーブルを表現したいとします。Goでそれを行うための最良の方法は何ですか?

明らかに、テーブルにはGoマップを使用したいのですが、タイプAの値のシーケンスには何を使用できますか?Goではスライスをマップのキーとして使用することはできません。配列は可能ですが、配列の長さはその型の一部であり、実行時に決定された長さのシーケンスを使用できるようにすることに興味があります。(1)最大長を宣言するAの配列を使用するか、(2)Aのスライスを使用して、キーとして使用するために文字列にシリアル化することができます(この手法はAwkおよびLuaプログラマーによく知られています...)。Goのこの「機能」について、私が説明したものよりも優れた回避策はありますか?

質問の元のバージョンに答えてJeremyWallが指摘したように、A = intの場合、文字列への変換が単なるキャストであるルーンのスライスを使用できるため、オプション(2)は整数に非常に適しています。

4

1 に答える 1

1

整数の代わりにルーンのシーケンスが機能しますか?ルーンはuint32であり、文字列への変換は単なるキャストです。

package main

import "fmt"

type myKey struct {
  seq []int
}

func main() {
    m := make(map[string]string)
    key := []rune{1, 2}
    m[string(key)] = "foo"
    fmt.Print("lookup: ", m[string(key)])
}

ここでこのコードを試すことができます:http://play.golang.org/p/Kct1dum8A0

于 2012-04-12T02:33:35.727 に答える