2012-11-20 52 views
4

是否可以a)定義b)使用現有數組初始化一個新的多維數組,如下面的代碼而不是var b [2][3]int,只是說類似var b [2]a
使用a的類型,而不是硬編碼它(它忽略了a的使用點)。
也許處理初始化=同時複製值?前往:使用現有數組的類型和值定義多維數組?

package main 

func main() { 
     a := [...]int{4,5,6} 
     var b [2][3]int 
     b[0],b[1] = a,a 
} 

(我知道的方便和切片的便利性,但這個問題是關於理解陣列。)

編輯:不敢相信,我忘了var b [2][len(a)]int,初學者的大腦凍結。一行答案將是var b = [2][len(a)]int{a,a}。這是一種類型轉換,對吧?

+0

也許模板,因爲他們可以支持任何類型 –

回答

5

下面的代碼也可以工作。你的例子和我的例子都是一樣的,兩者都不應該比另一個快得多。

除非您使用反射來製作您的[3]int的切片(不是數組),否則不可能在您的新類型中重複[3]int。即使這在目前的版本中也是不可能的。這是小費,將在Go 1.1中發佈。

package main 

import "fmt" 

func main() { 
    a := [...]int{4,5,6} 
    var b = [2][3]int{a, a} 
    fmt.Println(b) 
} 
+2

謝謝!我似乎也有一個初學者的腦凍結,因爲'var b [2] [len(a)] int'似乎工作得很好。 – kilves76

+0

是的,'len(array)'是一個常量表達式(在編譯時計算),因此可以在定義其他數組類型時使用。 –