2013-07-02 21 views
13

我有一個結構數組。Go的列表理解

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))

+0

(在你的例子中忽略了僵化的語法):不。這幾乎是你怎麼做的。 Go中既沒有列表理解也沒有地圖,循環非常習慣。 –

+1

這是一個不是數組的結構片。在去陣列和切片是完全不同的! [http://golang.org/doc/articles/slices_usage_and_internals.html] –

回答

7

不,Go沒有列表強制或類似。你的代碼看起來很好。對於更長的切片,使用make分配合適的長度可能會更好。

+0

啊,這是一個恥辱,不確定清晰度是否值得這種情況下的冗長,但我想Go的設計師會知道比我好 :) –

6

不,真誠的,他們不會。

地圖和列表理解是足夠主流的,被認爲是任何現代語言的基礎。

這是一種非常好的語言,它帶有很棒的想法,但是我仍然感到很不舒服,即使它在Go方式中是慣用的,結構良好的代碼,我也覺得我的代碼很髒。

希望在未來有所改變。