簡單分析Go語言中陣列的這些細節
導讀 | 這篇文章主要為大家詳細介紹了Go語言中陣列一些細節的相關資料,文中的示例程式碼講解詳細,對我們學習Go語言有一定的幫助,需要的可以瞭解一下 |
書接上文,我們提到二維陣列中的第二個維度的陣列不能用...來表示,接下來我們要認識兩個新的函式,它們分別是len和cap
package main func main() { a := [2]int{} println(len(a), cap(a)) }
由上方程式碼可知,我們在main函式里面定義了一個a陣列,長度為2,未進行初始化變數等賦值操作,所以陣列元素均為0;呼叫列印函式輸出的是陣列a的length和cap值,這裡執行結果均為2
接下來我們重點講一下二維陣列的遍歷,有些小夥伴可能就要問了:我沒學過什麼遍歷迴圈啊,這讓我怎麼理解?
別急,我們們看程式碼主要看的是一個思路過程~
package main import ( "fmt" ) func main() { var f [2][3]int = [...][3]int{{1, 2, 3}, {7, 8, 9}} for k1, v1 := range f { for k2, v2 := range v1 { fmt.Printf("(%d,%d)=%d ", k1, k2, v2) } fmt.Println() } }
首先我們可以看到在main函式里面定義了一個int型別,名叫f的陣列,它的屬性為2行3列,第一行儲存的是 {1,2,3} ,第二行儲存的是 {7,8,9} ,我們透過for迴圈對二維陣列進行一次遍歷,讀者暫時可以把它理解成一個迴圈的固定格式,後續迴圈會為讀者一一介紹,由於本次陣列是二維陣列,所以我們需要呼叫兩次for迴圈來對陣列進行遍歷,透過函式列印輸出所需要的值
package main import "fmt" func printArr(arr *[5]int) { arr[0] = 10 for i, v := range arr { fmt.Println(i, v) } } func main() { var arr1 [5]int printArr(&arr1) fmt.Println(arr1) arr2 := [...]int{2, 4, 6, 8, 10} printArr(&arr2) fmt.Println(arr2) }
首先我們可以看到定義了一個printArr方法,並在方法裡面內建了一個長度為5、int型別的陣列。緊接著我們將陣列的第一個元素賦值為10,緊接著對陣列進行迴圈遍歷,分別輸出陣列的索引及索引位置上的值
回到main方法中,我們定義了一個名叫arr1,長度為5,int型別的陣列,並直接列印該陣列的地址值,同時呼叫函式列印出該陣列未進行初始化時候的值,顯而易見的是,由於我們在printArr中已經對索引位置為1的陣列的值進行了一次修改,所以本次列印輸出陣列的時候,也會受到上一次陣列的影響,所以本次陣列列印輸出的結果為[10 0 0 0 0]。緊接著,我們定義了一個名叫arr2,長度為任意,int型別的陣列,同時給予賦值操作,但是由於在printArr中索引為1的陣列的位置的值已經發生了改變,所以本次arr2陣列列印輸出的結果為[10 4 6 8 10]
package main import ( "fmt" "math/rand" "time" ) func sumArr(a [10]int) int { var sum int = 0 for i := 0; i < len(a); i++ { sum += a[i] } return sum } func main() { rand.Seed(time.Now().Unix()) var b [10]int for i := 0; i < len(b); i++ { b[i] = rand.Intn(1000) } sum := sumArr(b) fmt.Printf("sum=%d\n", sum) }
我們首先定義了一個方法名叫sumArr,同時往該方法裡面傳入一個名為a,長度為10,資料型別為int型別的陣列。在本方法裡面,我們定義一個變數為sum,使用for迴圈來對陣列進行遍歷操作,同時使用sum來記錄該陣列各元素的和,最終返回sum的值
緊接著我們看到main方法,我們在該方法中使用rand.seed()函式來定義一個隨機數,同時初始化一個名為b,長度為10,資料型別為int型別的陣列使用for迴圈對該陣列進行遍歷,同時將隨機數的值賦給b陣列中元素。最終我們將陣列sumArr中b的值賦給sum,呼叫函式進行列印輸出sum的值
找出陣列中和為給定值的兩個元素的下標,例如陣列[1,3,5,8,7],
找出兩個元素之和等於8的下標分別是(0,4)和(1,2)
求元素和,是給定的值
package main import "fmt" func myTest(a [5]int, target int) { // 遍歷陣列 for i := 0; i < len(a); i++ { other := target - a[i] // 繼續遍歷 for j := i + 1; j < len(a); j++ { if a[j] == other { fmt.Printf("(%d,%d)\n", i, j) } } } } func main() { b := [5]int{1, 3, 5, 8, 7} myTest(b, 8) }
根據題意,我們可以得知,在myTest方法裡面我們定義了一個名為a,長度為5,資料型別為int型別的陣列,同時還定義了一個目標值target用於檢驗元素和是否正確。
緊接著我們對該陣列進行遍歷,定義other變數用於表示另一個陣列元素,這裡進行二次遍歷的原因是因為本條題目需要匹配陣列中兩個元素的值,因此進行二次遍歷匹配陣列中i的值,一旦與other匹配上,即列印輸出該陣列的值(兩個元素) 。
我們在main函式中對陣列b進行變數初始化的賦值操作,以便進行方法的呼叫,如果在陣列中能夠找到myTest()方法中的第二個,即target元素,就列印輸出這兩個元素,反之則什麼都不列印
今天我們主要學習了Go語言在二維陣列和遍歷陣列中的一些應用。如遍歷陣列的一個固定格式,亦或是陣列的複製與傳參,這些都值得讀者去仔細推敲
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2929393/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 認識 Go 語言中的陣列Go陣列
- 聊聊Go語言中的陣列與切片Go陣列
- go語言中遍歷陣列的方法有哪些Go陣列
- fragment簡單有用的一些細節Fragment
- 詳細解讀go語言中的chnanelGoNaN
- Go語言中defer的一些坑Go
- C語言中的static 詳細分析C語言
- Go語言中的單元測試Go
- C語言 簡單的佇列(陣列佇列)C語言佇列陣列
- Golang陣列注意細節Golang陣列
- c語言中三維陣列C語言陣列
- c語言中陣列的三種型別C語言陣列型別
- go 語言陣列Go陣列
- C++語言中陣列指標和指標陣列徹底分析(系列一) (轉)C++陣列指標
- Go 語言中的方法Go
- Go語言中的InterfaceGo
- c語言中計算陣列長度的方法C語言陣列
- c語言中陣列的宣告與初始化C語言陣列
- 補充內容:C++語言中陣列指標和指標陣列徹底分析 (轉)C++陣列指標
- C語言中陣列溢位是什麼C語言陣列
- 那些被忽略的 JavaScript 陣列方法細節JavaScript陣列
- C語言中如何求一個陣列的長度C語言陣列
- c語言關於陣列的簡單運算C語言陣列
- Go 語言中的 collect 使用Go
- Go 語言中的外掛Go
- Go 語言中的 切片 --sliceGo
- xml轉成陣列,原來這麼簡單!XML陣列
- 在 go 語言中利用反射精簡程式碼Go反射
- go語言之陣列與切片Go陣列
- 介面中這些細節你知道嗎?
- c語言中二維陣列的生成及應用C語言陣列
- 簡單介紹Go 語言常見的一些坑Go
- GO 語言中的物件導向Go物件
- 論go語言中goroutine的使用Go
- Go語言中的併發模式Go模式
- Numpy 陣列簡單操作陣列
- (C語言)簡單明瞭的 陣列模擬棧+ (C++)陣列模擬棧C語言陣列C++
- C語言中“陣列名”和“&陣列名”C語言陣列