編程筆記 Golang基礎 024 映射

編程筆記 Golang基礎 024 映射

  • 一、映射
  • 二、映射的定義與初始化
  • 三、基本操作
  • 四、綜合示例程序

Go語言中的映射(map)是一種關聯數組或哈希表數據結構,它存儲鍵值對,其中每個鍵都是唯一的。在Go中,你可以使用 map[keyType]valueType來聲明一個映射。

一、映射

在Go語言中,映射(map)是一種內置的數據結構,它提供了一種關聯鍵值對的方式,允許通過唯一的鍵(key)來存儲和檢索對應的值(value)。映射中的鍵是唯一的,并且用于快速查找相關聯的值。這種數據結構常被稱為關聯數組、哈希表或字典,在其他編程語言中也有類似的概念。

Go語言中的映射定義語法如下:

map[keyType]ValueType

例如,創建一個存儲字符串到整數的映射:

var m map[string]int

使用映射時需要注意以下幾點:

  • 映射在使用前必須初始化(可以通過 make 函數或者直接聲明并初始化),否則會引發運行時錯誤。
  • 映射的鍵必須是可比較類型,也就是說,它們需要支持相等性判斷操作(== 和 !=)。
  • 映射是無序的,因此不能保證迭代順序的一致性。
  • Go 語言中的映射實現了高效的查找、插入和刪除操作,這些操作的時間復雜度通常接近 O(1)。

示例代碼:

// 初始化一個映射
m := make(map[string]int)// 插入鍵值對
m["apple"] = 1
m["banana"] = 2// 根據鍵查找值
value, ok := m["apple"]
if ok {fmt.Println("The value for key 'apple' is", value)
} else {fmt.Println("Key 'apple' not found")
}// 刪除鍵值對
delete(m, "banana")

在這個例子中,“ok”是一個布爾值,表示查找是否成功找到指定的鍵。如果鍵存在,則“ok”為true,同時返回相應的值;如果鍵不存在,則“ok”為false,返回的值為零值。

二、映射的定義與初始化

// 定義并初始化一個字符串到整數的映射
var numbers map[string]int = map[string]int{"one": 1, "two": 2, "three": 3}// 或者直接初始化而不聲明變量類型
numbers := map[string]int{"one": 1, "two": 2, "three": 3}// 使用make函數創建一個新的映射(推薦方式)
numbers := make(map[string]int)
numbers["one"] = 1
numbers["two"] = 2
numbers["three"] = 3

三、基本操作

  • 插入和訪問元素:
numbers["four"] = 4 // 插入新的鍵值對
value, exists := numbers["one"] // 訪問元素,exists為bool型,表示鍵是否存在
if exists {fmt.Println("The value of 'one' is", value)
}
  • 刪除元素:
delete(numbers, "two") // 刪除鍵為"two"的鍵值對
  • 遍歷映射:
for key, value := range numbers {fmt.Printf("Key: %s, Value: %d\n", key, value)
}

四、綜合示例程序

下面是一個綜合應用的示例程序,該程序創建了一個學生姓名到分數的映射,并實現了添加、查詢、刪除和遍歷操作:

package mainimport ("fmt"
)func main() {// 初始化一個映射scores := make(map[string]int)// 添加一些學生的分數scores["Alice"] = 95scores["Bob"] = 85scores["Charlie"] = 90// 查詢并打印某個學生的分數if score, ok := scores["Alice"]; ok {fmt.Printf("Alice's score is %d.\n", score)} else {fmt.Println("Alice is not in the records.")}// 更新一個學生的分數scores["Bob"] = 90// 刪除一個學生記錄delete(scores, "Charlie")// 遍歷并打印所有學生的分數fmt.Println("All students' scores:")for name, score := range scores {fmt.Printf("%s: %d\n", name, score)}
}

在這個示例中,我們首先創建了一個名為scores的映射,用于存儲學生姓名及其對應的分數。然后演示了如何向映射中插入數據、通過鍵查詢值、更新現有鍵的值以及刪除鍵值對。最后,通過range關鍵字遍歷映射并打印所有的學生分數。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697751.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697751.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697751.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于el-select值的回顯問題 : 框內顯示label值還是value值

<el-form-item label"狀態" prop""><el-selectv-model"roleForm.state"class"m-2"size"large"style"width: 240px"placeholder"請選擇狀態"value-key"value"//value-key 與下面的ke…

How to implement multiple file uploads based on Swagger 3.x in Spring boot 3.x

How to implement multiple file uploads based on Swagger 3.x in Spring boot 3.x Projectpom.xmlOpenAPIConfigFileUploadControllerapplication.yaml Project pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://…

軟件壓力測試:測試方法與步驟詳解

隨著軟件應用的不斷發展&#xff0c;用戶對系統性能的要求也逐漸提高。在不同的負載條件下&#xff0c;系統必須能夠保持穩定、高效的運行。軟件壓力測試是一種驗證系統在各種負載情況下性能表現的關鍵手段。本文將詳細探討軟件壓力測試的方法和步驟。 1. 明確測試目標 在進行壓…

vue源碼分析之nextTick源碼分析-逐行逐析-錯誤分析

nextTick的使用背景 在vue項目中&#xff0c;經常會使用到nextTick這個api&#xff0c;一直在猜想其是怎么實現的&#xff0c;今天有幸研讀了下&#xff0c;雖然源碼又些許問題&#xff0c;但仍值得借鑒 核心源碼解析 判斷當前環境使用最合適的API并保存函數 promise 判斷…

2024年2月17日~2月23日周報

文章目錄 一、前言二、DDNet架構學習2.1 數據預處理2.2 網絡模型構建 三、基于深度學習地震數據去噪處理3.1 深度學習在地震數據去噪中的研究方向3.2 深度學習地震數據去噪流程3.2.1 數據集準備3.2.2 模型構建3.2.3 訓練網絡 3.3 基于DnCNN的地震數據去噪實驗 四、小結4.1 存在…

xxl_job系列---【GLUE(shell)模式如何傳多個參數,并被shell接收】

1.場景 我需要傳入多個參數&#xff0c;在執行任務時傳入的任務參數用逗號隔開&#xff0c;到shell中都被$1當做字符串接收到了&#xff0c;沒辦法&#xff0c;只能在shell中截取字符串&#xff0c;截成多個參數。 2.編輯入參 CRON:0 0 0 1 * ? #每月1號0點執行 點擊“任務管理…

Javascript數字精度丟失的問題

一、問題 0.1 0.2 0.3 // false 二、浮點數 “浮點數”是一種表示數字的標準&#xff0c;整數也可以用浮點數的格式來存儲 我們也可以理解成&#xff0c;浮點數就是小數 在JavaScript中&#xff0c;現在主流的數值類型是Number&#xff0c;而Number采用的是IEEE754規范中…

uniapp開發微信小程序跳轉到另一個小程序中

注意&#xff1a;一開始我的云上務工模塊是單獨的tabbar界面&#xff0c;但是小程序跳轉好像不能直接點擊tabbar進行&#xff0c;所以我將這里改成了點擊首頁中的按鈕進行跳轉 點擊這里進行小程序跳轉 目錄 基礎講解 uniapp小程序跳轉的兩個方法 調用說明&#xff08;半屏跳轉…

C++力扣題目 647--回文子串 516--最長回文子序列

647. 回文子串 力扣題目鏈接(opens new window) 給定一個字符串&#xff0c;你的任務是計算這個字符串中有多少個回文子串。 具有不同開始位置或結束位置的子串&#xff0c;即使是由相同的字符組成&#xff0c;也會被視作不同的子串。 示例 1&#xff1a; 輸入&#xff1a…

面試系列之《Spark》(持續更新...)

參考文檔及示例代碼均基于pyspark3.1.2 1.什么是RDD&#xff1f;2.job、stage、task如何劃分&#xff1f;3.什么是寬窄依賴&#xff1f;4.spark有哪幾種部署模式&#xff1f;5.spark中的算子分為哪些類型&#xff0c;舉例說明。6.cache、persist、checkpoint的區別&#xff0c;…

C++模板為什么不能聲明和定義分離

首先我們要直到C程序運行需要進行的四個階段。 預處理->編譯->匯編->鏈接 編譯&#xff1a;對語法語義分析&#xff0c;分析無誤生成匯編&#xff0c;頭文件不參加編譯&#xff0c;多個源文件是分開單獨編譯的。 鏈接&#xff1a;將多個obj文件鏈接合成一個&#x…

ubuntu20.04安裝webots仿真

ubuntu20.04安裝webots仿真 1.首先: wget -qO- https://cyberbotics.com/Cyberbotics.asc | sudo apt-key add - sudo apt-add-repository deb https://cyberbotics.com/debian/ binary-amd64/ sudo apt-get update sudo apt-get install webots .bashrc中添加環境變量:…

Sora----打破虛實之間的最后一根枷鎖----這扇門的背后是人類文明的晟陽還是最后的余暉

目錄 一.Sora出道即巔峰 二.為何說Sora是該領域的巨頭 三.Sora無敵的背后究竟有怎樣先進的處理技術 1.Spacetime Latent Patches 潛變量時空碎片&#xff0c;建構視覺語言系統 2.擴散模型與Diffusion Transformer&#xff0c;組合成強大的信息提取器 3.DiT應用于潛變量時…

關于在分布式環境中RVN和使用場景的介紹4

簡介 在前面的文檔中&#xff0c;我們介紹了RVN的概念&#xff0c;通過RVN可以解決的某類問題和使用技巧&#xff0c;以及處理RVN的邏輯的具體實現。在本文中&#xff0c;我們將要介紹關于如何使用RVN解決另一種在分布式系統中常出現的問題。 問題 假設我們創建了一個servic…

C語言—自定義(構造)類型

2.20&#xff0c;17.56 1.只有當我們使用結構體類型定義變量/結構體數組,系統才會為結構體的成員分配內存空間,用于存儲對應類型的數據 2.strct 結構體 一起作為結構體類型標識符 嘿嘿暫時先這樣&#xff0c;我會回來改的1、定義一個表示公交線路的結構體&#xff0c;要…

pikachu靶場-CSRF

CSRF: 介紹&#xff1a; Cross-site request forgery簡稱為"CSRF”。 在CSF的攻擊場景中攻擊者會偽造一個請求&#xff08;這個請求一般是一個鏈接&#xff09; 然后欺騙目標用戶進行點擊&#xff0c;用戶一旦點擊了這個請求&#xff0c;整個攻擊也就完成了&#xff0…

VSCode-更改系統默認路徑

修改vscode中的默認擴展路徑&#xff1a;"%USERPROFILE%\.vscode" 打開目錄C:\用戶\電腦用戶名&#xff0c;將.vscode文件剪切至D:\VSCode文件夾下 用管理員身份打開cmd.exe命令界面輸入mklink /D "%USERPROFILE%\.vscode" "D:\VSCode\.vscode\"…

同一個包下 golang run時報undefined

問題描述 今天在運行一個項目&#xff0c;一個包下有兩個文件&#xff0c;分別是main.go和route&#xff0c;main函數在main.go文件中&#xff0c;main引用了route.go中的兩個函數&#xff0c;SetupRoutes和SetupAdminRoutes go build 編譯后&#xff0c;直接運行&#xff0c…

【C++私房菜】面向對象中的簡單繼承

文章目錄 一、 繼承基本概念二、派生類對象及派生類向基類的類型轉換三、繼承中的公有、私有和受保護的訪問控制規則四、派生類的作用域五、繼承中的靜態成員 一、 繼承基本概念 通過繼承&#xff08;inheritance&#xff09;聯系在一起的類構成一種層次關系。通常在層次關系的…

Leetcoder Day17| 二叉樹 part06

語言&#xff1a;Java/C 654.最大二叉樹 給定一個不含重復元素的整數數組。一個以此數組構建的最大二叉樹定義如下&#xff1a; 二叉樹的根是數組中的最大元素。左子樹是通過數組中最大值左邊部分構造出的最大二叉樹。右子樹是通過數組中最大值右邊部分構造出的最大二叉樹。 …