1. 程式人生 > 遊戲 >雪樂山曾想收購id Software 卻對《德軍總部3D》沒興趣

雪樂山曾想收購id Software 卻對《德軍總部3D》沒興趣

  Go 語言陣列 宣告陣列 初始化陣列 訪問陣列元素 Go 語言多維陣列 二維陣列 初始化二維陣列 Go 語言向函式傳遞陣列 Go 語言陣列 Go 語言提供了陣列型別的資料結構。 陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列,這種型別可以是任意的原始型別例如整型、字串或者自定義型別。 相對於去宣告 number0, number1, ..., number99 的變數,使用陣列形式 numbers[0], numbers[1] ..., numbers[99] 更加方便且易於擴充套件。 陣列元素可以通過索引(位置)來讀取(或者修改),索引從 0 開始,第一個元素索引為 0,第二個索引為 1,以此類推。

 

宣告陣列 Go 語言陣列宣告需要指定元素型別及元素個數,語法格式如下: var variable_name [SIZE] variable_type 以上為一維陣列的定義方式。例如以下定義了陣列 balance 長度為 10 型別為 float32: var balance [10] float32   初始化陣列 以下演示了陣列初始化: var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 我們也可以通過字面量在宣告陣列的同時快速初始化陣列: balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 如果陣列長度不確定,可以使用 ... 代替陣列的長度,編譯器會根據元素個數自行推斷陣列的長度: var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 或 balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 如果設定了陣列的長度,我們還可以通過指定下標來初始化元素: // 將索引為 1 和 3 的元素初始化 balance := [5]float32{1:2.0,3:7.0} 初始化陣列中 {} 中的元素個數不能大於 [] 中的數字。 如果忽略 [] 中的數字不設定陣列大小,Go 語言會根據元素的個數來設定陣列的大小: balance[4] = 50.0 以上例項讀取了第五個元素。陣列元素可以通過索引(位置)來讀取(或者修改),索引從 0 開始,第一個元素索引為 0,第二個索引為 1,以此類推。

 

 

  訪問陣列元素 陣列元素可以通過索引(位置)來讀取。格式為陣列名後加中括號,中括號中為索引的值。例如: var salary float32 = balance[9] 以上例項讀取了陣列 balance 第 10 個元素的值。 以下演示了陣列完整操作(宣告、賦值、訪問)的例項: 例項 1 package main   import "fmt"   func main() {    var n [10]int /* n 是一個長度為 10 的陣列 */    var i,j int      /* 為陣列 n 初始化元素 */            for i = 0; i < 10; i++ {
      n[i] = i + 100 /* 設定元素為 i + 100 */    }      /* 輸出每個陣列元素的值 */    for j = 0; j < 10; j++ {       fmt.Printf("Element[%d] = %d\n", j, n[j] )    } } 以上例項執行結果如下: Element[0] = 100 Element[1] = 101 Element[2] = 102 Element[3] = 103 Element[4] = 104 Element[5] = 105 Element[6] = 106 Element[7] = 107 Element[8] = 108 Element[9] = 109 例項 2 package main   import "fmt"   func main() {    var i,j,k int    // 宣告陣列的同時快速初始化陣列    balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}      /* 輸出陣列元素 */         ...    for i = 0; i < 5; i++ {       fmt.Printf("balance[%d] = %f\n", i, balance[i] )    }        balance2 := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}    /* 輸出每個陣列元素的值 */    for j = 0; j < 5; j++ {       fmt.Printf("balance2[%d] = %f\n", j, balance2[j] )    }      //  將索引為 1 和 3 的元素初始化    balance3 := [5]float32{1:2.0,3:7.0}      for k = 0; k < 5; k++ {       fmt.Printf("balance3[%d] = %f\n", k, balance3[k] )    } } 以上例項執行結果如下: balance[0] = 1000.000000 balance[1] = 2.000000 balance[2] = 3.400000 balance[3] = 7.000000 balance[4] = 50.000000 balance2[0] = 1000.000000 balance2[1] = 2.000000 balance2[2] = 3.400000 balance2[3] = 7.000000 balance2[4] = 50.000000 balance3[0] = 0.000000 balance3[1] = 2.000000 balance3[2] = 0.000000 balance3[3] = 7.000000 balance3[4] = 0.000000   Go 語言多維陣列 Go 語言支援多維陣列,以下為常用的多維陣列宣告方式: var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type 以下例項聲明瞭三維的整型陣列: var threedim [5][10][4]int   二維陣列 二維陣列是最簡單的多維陣列,二維陣列本質上是由一維陣列組成的。二維陣列定義方式如下: var arrayName [ x ][ y ] variable_type variable_type 為 Go 語言的資料型別,arrayName 為陣列名,二維陣列可認為是一個表格,x 為行,y 為列,下圖演示了一個二維陣列 a 為三行四列:

 

 

二維陣列中的元素可通過 a[ i ][ j ] 來訪問。 例項 package main   import "fmt"   func main() {     // Step 1: 建立陣列     values := [][]int{}       // Step 2: 使用 append() 函式向空的二維陣列新增兩行一維陣列     row1 := []int{1, 2, 3}     row2 := []int{4, 5, 6}     values = append(values, row1)     values = append(values, row2)       // Step 3: 顯示兩行資料     fmt.Println("Row 1")     fmt.Println(values[0])     fmt.Println("Row 2")     fmt.Println(values[1])       // Step 4: 訪問第一個元素     fmt.Println("第一個元素為:")     fmt.Println(values[0][0]) } 以上例項執行輸出結果為: Row 1 [1 2 3] Row 2 [4 5 6] 第一個元素為: 1   初始化二維陣列 多維陣列可通過大括號來初始值。以下例項為一個 3 行 4 列的二維陣列: a := [3][4]int{ {0, 1, 2, 3} , /* 第一行索引為 0 */ {4, 5, 6, 7} , /* 第二行索引為 1 */ {8, 9, 10, 11}, /* 第三行索引為 2 */ } 注意:以上程式碼中倒數第二行的 } 必須要有逗號,因為最後一行的 } 不能單獨一行,也可以寫成這樣: a := [3][4]int{ {0, 1, 2, 3} , /* 第一行索引為 0 */ {4, 5, 6, 7} , /* 第二行索引為 1 */ {8, 9, 10, 11}} /* 第三行索引為 2 */ 以下例項初始化一個 2 行 2 列 的二維陣列: 例項 package main   import "fmt"   func main() {     // 建立二維陣列     sites := [2][2]string{}       // 向二維陣列新增元素     sites[0][0] = "Google"     sites[0][1] = "Runoob"     sites[1][0] = "Taobao"     sites[1][1] = "Weibo"       // 顯示結果     fmt.Println(sites) } 以上例項執行輸出結果為: [[Google Runoob] [Taobao Weibo]]   訪問二維陣列 二維陣列通過指定座標來訪問。如陣列中的行索引與列索引,例如: val := a[2][3] 或 var value int = a[2][3] 以上例項訪問了二維陣列 val 第三行的第四個元素。 二維陣列可以使用迴圈巢狀來輸出元素: 例項 package main   import "fmt"   func main() {    /* 陣列 - 5 行 2 列*/    var a = [5][2]int{ {0,0}, {1,2}, {2,4}, {3,6},{4,8}}    var i, j int      /* 輸出陣列元素 */    for  i = 0; i < 5; i++ {       for j = 0; j < 2; j++ {          fmt.Printf("a[%d][%d] = %d\n", i,j, a[i][j] )       }    } } 以上例項執行輸出結果為: a[0][0] = 0 a[0][1] = 0 a[1][0] = 1 a[1][1] = 2 a[2][0] = 2 a[2][1] = 4 a[3][0] = 3 a[3][1] = 6 a[4][0] = 4 a[4][1] = 8 以下例項建立各個維度元素數量不一致的多維陣列: 例項 package main   import "fmt"   func main() {     // 建立空的二維陣列     animals := [][]string{}       // 建立三一維陣列,各陣列長度不同     row1 := []string{"fish", "shark", "eel"}     row2 := []string{"bird"}     row3 := []string{"lizard", "salamander"}       // 使用 append() 函式將一維陣列新增到二維陣列中     animals = append(animals, row1)     animals = append(animals, row2)     animals = append(animals, row3)       // 迴圈輸出     for i := range animals {         fmt.Printf("Row: %v\n", i)         fmt.Println(animals[i])     } } 以上例項執行輸出結果為: Row: 0 [fish shark eel] Row: 1 [bird] Row: 2 [lizard salamander]   Go 語言向函式傳遞陣列 如果你想向函式傳遞陣列引數,你需要在函式定義時,宣告形參為陣列,我們可以通過以下兩種方式來宣告: 方式一 形參設定陣列大小: void myFunction(param [10]int) { . . . } 方式二 形參未設定陣列大小: void myFunction(param []int) { . . . } 例項 讓我們看下以下例項,例項中函式接收整型陣列引數,另一個引數指定了陣列元素的個數,並返回平均值: 例項 func getAverage(arr []int, size int) float32 {    var i int    var avg, sum float32        for i = 0; i < size; ++i {       sum += arr[i]    }      avg = sum / size      return avg; } 接下來我們來呼叫這個函式: 例項 package main   import "fmt"   func main() {    /* 陣列長度為 5 */    var  balance = [5]int {1000, 2, 3, 17, 50}    var avg float32      /* 陣列作為引數傳遞給函式 */    avg = getAverage( balance, 5 ) ;      /* 輸出返回的平均值 */    fmt.Printf( "平均值為: %f ", avg ); } func getAverage(arr [5]int, size int) float32 {    var i,sum int    var avg float32        for i = 0; i < size;i++ {       sum += arr[i]    }      avg = float32(sum) / float32(size)      return avg; } 以上例項執行輸出結果為: 平均值為: 214.399994 以上例項中我們使用的形參並未設定陣列大小。 浮點數計算輸出有一定的偏差,你也可以轉整型來設定精度。 例項 package main import (     "fmt" ) func main() {     a := 1.69     b := 1.7     c := a * b      // 結果應該是2.873     fmt.Println(c)  // 輸出的是2.8729999999999998 } 設定固定精度: 例項 package main import (     "fmt" ) func main() {     a := 1690           // 表示1.69     b := 1700           // 表示1.70     c := a * b          // 結果應該是2873000表示 2.873     fmt.Println(c)      // 內部編碼     fmt.Println(float64(c) / 1000000) // 顯示 }