在Golang中使用泛型從任何map中獲取鍵的slice
在Go 1.18之前,當你想從Go中的map中提取一個鍵列表時,你必須編寫程式碼來迭代map並將鍵新增到一個slice中。
從1.18起,有了新的泛型功能,你可以寫一個單一的通用函式,從任何map中獲取鍵,並在需要時使用它。不用再為特定型別的map編寫程式碼了。
伴隨著Go 1.18的釋出,golang.org/x/exp/maps包也已經發布,Keys()函式的工作原理與下面的相同。
package main import ( "fmt" ) func keys[K comparable, V any](m map[K]V) []K { keys := make([]K, 0, len(m)) for k := range m { keys = append(keys, k) } return keys } func main() { vegetableSet := map[string]bool{ "potato": true, "cabbage": true, "carrot": true, } fruitRank := map[int]string{ 1: "strawberry", 2: "raspberry", 3: "blueberry", } fmt.Printf("vegetableSet keys: %+v\n", keys(vegetableSet)) fmt.Printf("fruitRank keys: %+v\n", keys(fruitRank)) } |
keys()函式接受一個map作為引數,其中的鍵是具有可比較約束的型別,而值則具有any約束。
comparable約束描述了其值可以被比較的型別,這意味著==和!=運算子可以在它們身上使用。
any約束等同於interface{}:它接受任何型別,所以map的值可以是任何東西。
該函式的其餘部分非常簡單。它返回一個[]K的鍵slice,所以在函式主體的第一行,建立了所產生的slice。
注意,它的容量等於map的大小。然後,在一個迴圈中,每個map的鍵都被新增到生成的slice中。
用兩個不同的map執行示例程式碼,你會得到這樣的輸出。
vegetableSet keys: [potato cabbage carrot] fruitRank keys: [1 2 3] |
這就是全部。現在,通過一個keys()函式,你可以得到任何map的keys列表。
相關文章
- Spring 中優雅的獲取泛型資訊Spring泛型
- Java 中的泛型 集合(List,Set) MapJava泛型
- Golang 陣列和切片 Slice 和 Map 使用Golang陣列
- 關於 Go 中 Map 型別和 Slice 型別的傳遞Go型別
- 根據key集合批次從map中獲取value
- 在Golang中使用泛型reduce函式 - gosamplesGolang泛型函式
- 【譯】在非泛型類中建立泛型方法泛型
- HarmonyOS 專案中泛型的使用泛型
- 獲取Spring容器中Bean例項的工具類(Java泛型方法實現)SpringBeanJava泛型
- js中獲取鍵盤事件JS事件
- Java中的泛型Java泛型
- Kotlin中的泛型Kotlin泛型
- Java中泛型的詳細解析,深入分析泛型的使用方式Java泛型
- Golang 泛型初探Golang泛型
- Go快速入門 07 | 集合型別: array、slice 和 map的使用Go型別
- [golang]slice的坑:從append到共享GolangAPP
- bing Map 在vue專案中的使用Vue
- Java中如何使用泛型實現介面中的列表集合?Java泛型
- 從session中獲取資料Session
- Java中的泛型方法Java泛型
- Golang 引用型別-mapGolang型別
- hadoop 合併sequcefie並在map中讀取Hadoop
- Golang面試:泛型Golang面試泛型
- Golang slice 從原始碼來理解Golang原始碼
- 在 JDBC 中獲取插入 IDJDBC
- java 匿名 泛型 獲取真實類名Java泛型
- 泛型來了,看看如何應用到 slice泛型
- 預計在 Go 1.18 中內建泛型Go泛型
- 在 Fedora 中獲取最新的 Ansible 2.8
- 從 falcon api 中獲取資料API
- 深入解析Java中的泛型Java泛型
- Kotlin 泛型中的 in 和 outKotlin泛型
- golang-event在以太坊中的使用Golang
- 從一道題來看看golang中的slice作為引數時的現象Golang
- JavaScript獲取滑鼠在元素中的座標JavaScript
- JavaScript獲取元素在陣列中的位置JavaScript陣列
- 使用 Postfix 從 Fedora 系統中獲取電子郵件
- golang中struct、json、map互相轉化GolangStructJSON