網(wǎng)站首頁 編程語言 正文
數(shù)組相必大家都很熟悉,各大語言也都有數(shù)組的身影。Go 語言也提供了數(shù)組類型的數(shù)據(jù)結(jié)構(gòu)。
1. Array(數(shù)組)
數(shù)組是同一種數(shù)據(jù)類型的固定長度的元素集合。在 Go 語言中,數(shù)組聲明后長度就不能改變了,可以修改數(shù)組的元素,用法:
// eg: 定義一個長度為 10 的 int 數(shù)組 var a [10]int
2. 聲明數(shù)組
Go 語言數(shù)組申明時需要指定元素類型及元素的個數(shù),語法格式如下:
var variable_name [SIZE] variable_type
3. 數(shù)組初始化
Go 語言中初始化數(shù)組有很多方式。
3.1 方式一
我們也可以通過字面量在聲明數(shù)組的同時快速初始化數(shù)組:
balance := [5]float32{3.14, 13.0, 33.4, 15.0, 20.0}
3.2 方式二
如果數(shù)組長度不確定,可以使用?...
代替數(shù)組的長度,編譯器會根據(jù)元素個數(shù)自行推斷數(shù)組的長度:
balance := [...]float32{3.14, 13.0, 33.4, 15.0, 20.0}
3.3 方式三
如果設(shè)置了數(shù)組的長度,我們還可以通過指定下標(biāo)來初始化元素:
// 將索引下標(biāo)為 1 和 3 的元素初始化 balance := [5]float32{1:2.0,3:7.0}
3.4 多維數(shù)組
package main import ( "fmt" ) var array1 [5][3]int var array2 [2][3]int = [...][3]int{{10, 20, 30}, {4, 5, 6}} func main() { arr1 := [2][3]int{{10, 11, 12}, {20, 21, 22}} arr2 := [...][2]int{{10, 11}, {20, 21}, {30, 31}} fmt.Println(array1, array2) fmt.Println(arr1, arr2) }
注意:?Go 語言多維數(shù)組中,只有第一層可以用?...
其他維度不能用?...
4. 遍歷數(shù)組&取值
Go 語言中,遍歷數(shù)組有以下兩種方法:
func main() { var users = [...]string{"張三", "李四", "王五"} // 方法1:for range遍歷 for index, item := range users { fmt.Println(index, item) } // 方法2:for循環(huán)遍歷 for i := 0; i < len(users); i++ { fmt.Println("姓名:", users[i]) } }
多維數(shù)組遍歷
func main() { var f [2][3]int = [...][3]int{{10, 20, 30}, {4, 5, 6}} for k1, v1 := range f { for k2, v2 := range v1 { fmt.Printf("(%d,%d)=%d ", k1, k2, v2) } fmt.Println("-------------") } }
注意:?Go 語言中訪問越界,如果下標(biāo)在數(shù)組合法范圍之外,則觸發(fā)訪問越界,會出現(xiàn)?panic
5. 數(shù)組拷貝和傳參
Go 語言中數(shù)組是值類型,賦值和傳參會復(fù)制整個數(shù)組。只會改變復(fù)制出來臨時數(shù)組的值,不會改變本身。
package main import "fmt" func printArr1(arr *[5]int) { // 數(shù)組指針 arr[0] = 1000 } func printArr2(arr [5]int) { arr[0] = 1000 } func main() { arr1 := [5]int{100, 200, 300, 400, 500} printArr1(&arr1) fmt.Println(arr1) arr2 := [...]int{2, 4, 6, 8, 10} printArr2(arr2) fmt.Println(arr2) }
控制臺輸出結(jié)果:
[1000 200 300 400 500]
[2 4 6 8 10]
注意:
- 數(shù)組支持 “==“、”!=” 操作符,因為其內(nèi)存總是被初始化過的。
- [n]T 表示指針數(shù)組,[n]T 表示數(shù)組指針 。
原文鏈接:https://segmentfault.com/a/1190000043201189
相關(guān)推薦
- 2022-04-10 Python?tkinter實現(xiàn)計算器功能_python
- 2022-04-24 Android實現(xiàn)Neumorphism?UI控件_Android
- 2022-07-11 Python中列表,元組,字典和集合的區(qū)別及它們之間的轉(zhuǎn)換_python
- 2022-09-24 C語言利用面試真題理解指針的使用_C 語言
- 2023-06-16 C語言函數(shù)調(diào)用底層實現(xiàn)原理分析_C 語言
- 2023-07-04 spring boot security自定義認(rèn)證
- 2022-05-25 pytorch?hook?鉤子函數(shù)的用法_python
- 2023-05-23 pytorch中backward()方法如何自動求梯度_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支