淺析Go語言中數(shù)組的這些細節(jié)
Go語言基礎(chǔ)二
len&cap
書接上文,我們提到二維數(shù)組中的第二個維度的數(shù)組不能用...來表示,接下來我們要認(rèn)識兩個新的函數(shù),它們分別是len和cap
package main
?
func main() {
a := [2]int{}
println(len(a), cap(a))
}由上方代碼可知,我們在main函數(shù)里面定義了一個a數(shù)組,長度為2,未進行初始化變量等賦值操作,所以數(shù)組元素均為0;調(diào)用打印函數(shù)輸出的是數(shù)組a的length和cap值,這里運行結(jié)果均為2
二維數(shù)組的遍歷
接下來我們重點講一下二維數(shù)組的遍歷,有些小伙伴可能就要問了:我沒學(xué)過什么遍歷循環(huán)啊,這讓我怎么理解?
別急,咱們看代碼主要看的是一個思路過程~
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函數(shù)里面定義了一個int類型,名叫f的數(shù)組,它的屬性為2行3列,第一行存儲的是 {1,2,3} ,第二行存儲的是 {7,8,9} ,我們通過for循環(huán)對二維數(shù)組進行一次遍歷,讀者暫時可以把它理解成一個循環(huán)的固定格式,后續(xù)循環(huán)會為讀者一一介紹,由于本次數(shù)組是二維數(shù)組,所以我們需要調(diào)用兩次for循環(huán)來對數(shù)組進行遍歷,通過函數(shù)打印輸出所需要的值
數(shù)組的拷貝與傳參
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方法,并在方法里面內(nèi)置了一個長度為5、int類型的數(shù)組。緊接著我們將數(shù)組的第一個元素賦值為10,緊接著對數(shù)組進行循環(huán)遍歷,分別輸出數(shù)組的索引及索引位置上的值
回到main方法中,我們定義了一個名叫arr1,長度為5,int類型的數(shù)組,并直接打印該數(shù)組的地址值,同時調(diào)用函數(shù)打印出該數(shù)組未進行初始化時候的值,顯而易見的是,由于我們在printArr中已經(jīng)對索引位置為1的數(shù)組的值進行了一次修改,所以本次打印輸出數(shù)組的時候,也會受到上一次數(shù)組的影響,所以本次數(shù)組打印輸出的結(jié)果為[10 0 0 0 0]。緊接著,我們定義了一個名叫arr2,長度為任意,int類型的數(shù)組,同時給予賦值操作,但是由于在printArr中索引為1的數(shù)組的位置的值已經(jīng)發(fā)生了改變,所以本次arr2數(shù)組打印輸出的結(jié)果為[10 4 6 8 10]
求數(shù)組所有元素之和
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,同時往該方法里面?zhèn)魅?strong>一個名為a,長度為10,數(shù)據(jù)類型為int類型的數(shù)組。在本方法里面,我們定義一個變量為sum,使用for循環(huán)來對數(shù)組進行遍歷操作,同時使用sum來記錄該數(shù)組各元素的和,最終返回sum的值
緊接著我們看到main方法,我們在該方法中使用rand.seed()函數(shù)來定義一個隨機數(shù),同時初始化一個名為b,長度為10,數(shù)據(jù)類型為int類型的數(shù)組使用for循環(huán)對該數(shù)組進行遍歷,同時將隨機數(shù)的值賦給b數(shù)組中元素。最終我們將數(shù)組sumArr中b的值賦給sum,調(diào)用函數(shù)進行打印輸出sum的值
例題:數(shù)組元素匹配問題
找出數(shù)組中和為給定值的兩個元素的下標(biāo),例如數(shù)組[1,3,5,8,7],
找出兩個元素之和等于8的下標(biāo)分別是(0,4)和(1,2)
求元素和,是給定的值
package main
import "fmt"
func myTest(a [5]int, target int) {
// 遍歷數(shù)組
for i := 0; i < len(a); i++ {
other := target - a[i]
// 繼續(xù)遍歷
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)
}根據(jù)題意,我們可以得知,在myTest方法里面我們定義了一個名為a,長度為5,數(shù)據(jù)類型為int類型的數(shù)組,同時還定義了一個目標(biāo)值target用于檢驗元素和是否正確。
緊接著我們對該數(shù)組進行遍歷,定義other變量用于表示另一個數(shù)組元素,這里進行二次遍歷的原因是因為本條題目需要匹配數(shù)組中兩個元素的值,因此進行二次遍歷匹配數(shù)組中i的值,一旦與other匹配上,即打印輸出該數(shù)組的值(兩個元素) 。
我們在main函數(shù)中對數(shù)組b進行變量初始化的賦值操作,以便進行方法的調(diào)用,如果在數(shù)組中能夠找到myTest()方法中的第二個,即target元素,就打印輸出這兩個元素,反之則什么都不打印
今日總結(jié)
今天我們主要學(xué)習(xí)了Go語言在二維數(shù)組和遍歷數(shù)組中的一些應(yīng)用。如遍歷數(shù)組的一個固定格式,亦或是數(shù)組的拷貝與傳參,這些都值得讀者去仔細推敲
到此這篇關(guān)于淺析Go語言中數(shù)組的這些細節(jié)的文章就介紹到這了,更多相關(guān)Go語言數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用VSCODE配置GO語言開發(fā)環(huán)境的完整步驟
Go語言是采用UTF8編碼的,理論上使用任何文本編輯器都能做Go語言開發(fā),大家可以根據(jù)自己的喜好自行選擇,下面這篇文章主要給大家介紹了關(guān)于使用VSCODE配置GO語言開發(fā)環(huán)境的完整步驟,需要的朋友可以參考下2022-11-11

