網站首頁 編程語言 正文
Go語言基礎二
len&cap
書接上文,我們提到二維數組中的第二個維度的數組不能用...
來表示,接下來我們要認識兩個新的函數,它們分別是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語言在二維數組和遍歷數組中的一些應用。如遍歷數組的一個固定格式,亦或是數組的拷貝與傳參,這些都值得讀者去仔細推敲
原文鏈接:https://juejin.cn/post/7168621664614219789
相關推薦
- 2022-04-25 ASP.NET?Core?MVC中使用Tag?Helper組件_實用技巧
- 2022-01-11 我不會ES6-數據類型轉換-一個對象變為對象數組 Object.keys(obj)
- 2022-03-22 Android中ListView使用示例介紹_Android
- 2022-12-04 Android性能優化死鎖監控知識點詳解_Android
- 2022-12-11 Redhat持久化日志實戰示例詳解_相關技巧
- 2022-09-28 k8s證書有效期時間修改的方法詳解_云其它
- 2022-12-13 Kubernetes中創建命名空間實現方法_云其它
- 2022-10-17 PaddleOCR?識別表情包文字示例詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支