2013-07-02 11 views
13

私は構造体の配列を持っています。Goでのリストの理解

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

私はそう

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

これを行うにはより多くの慣用的な方法がありますように、関数にf2フィールドの配列を渡したいですか? Pythonでは、私はSomeFunc([s.f2 for s in a])をします。関数型言語では、私は(SomeFunc (map (lambda (s) (s.f2)) a))を実行します。

+0

(あなたの例では、壊れた構文を無視しています):そうです。 Goにはリストの理解やマップはなく、ループは非常に慣例的です。 –

+1

これは配列ではなく構造体のスライスです。 go配列とスライスはかなり異なっています! [ここには最終的な情報源があります](http://golang.org/doc/articles/slices_usage_and_internals.html) –

答えて

7

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

+0

ああ、残念ですが、明快さはこの場合の冗長さの価値があるのか​​分かりませんが、私はGoのデザイナーが私よりも良い:) –

6

いいえ、誠実に、そうではありません。

マップとリストの理解度は、現代語では基本的なものと考えられるほど主流です。

素晴らしいアイデアで素敵な言葉ですが、私はまだ快適ではありませんし、時には自分のコードが慣れていても、汚いと感じることがあります。

これは今後変更されることを願っています。