18

私は構造体の配列を持っています。

var a = [] struct {
    f1 string
    f2 string
}{
    {"foo", "bar"},
    {"biz", "baz"},
}

f2次のように、フィールドの配列を関数に渡したい

var f2s []string
for _, s := range a {
    f2s = append.f2s(s.f2)
}
// f2s = {"bar", "baz"}
SomeFunc(f2s)

これを行うためのより慣用的な方法はありますか?Pythonでは、私はそうしますSomeFunc([s.f2 for s in a])。関数型言語では、私は(SomeFunc (map (lambda (s) (s.f2)) a)).

4

2 に答える 2

10

いいえ、Go にはリスト強制などはありません。あなたのコードは問題ないようです。より長いスライスの場合は、make で適切な長さを割り当てる方がよい場合があります。

于 2013-07-02T00:37:35.087 に答える
7

いいえ、正直なところ、彼らはそうしません。

マップとリストの理解は、現代のどの言語でも基本と見なされるほど十分に主流です。

それは素晴らしいアイデアを備えた素晴らしい言語ですが、私はまだ慣れているとは言えず、Go のやり方で慣用的で適切に構造化されたコードであっても、コードが汚いと感じることがよくあります。

これが将来変わることを願っています。

于 2014-09-14T07:22:31.720 に答える