目錄
問題內容
解決方法
首頁 後端開發 Golang GO 中將 Map 轉換為 List 的通用函數

GO 中將 Map 轉換為 List 的通用函數

Feb 13, 2024 pm 08:30 PM
鍵值對

GO 中将 Map 转换为 List 的通用函数

php小編草莓為您介紹一款名為「GO 中將 Map 轉換為 List 的通用函數」的實用工具。這個函數可以幫助您將鍵值對映射(Map)的資料結構轉換為列表(List)的資料結構。透過這個通用函數,您可以方便地將複雜的資料結構轉換為更簡潔的形式,提高程式碼的可讀性和可維護性。無論您是在開發中遇到了類似的需求,還是想了解更多關於資料結構轉換的技巧,這個通用函數都將為您帶來便利和啟發。讓我們一起來探索這個實用工具吧!

問題內容

如何在 go 中寫一個函數,將任何 map 轉換為物件清單(刪除鍵)?

例如:

func maptolist(inputmap map[any]any) any {
    var resultlist []any 
    for _, obj := range inputmap {
        resultlist = append(resultlist, obj)
    }
    return resultlist
}

func main() {
    mymap := make(map[string]string)
    mymap["a"] = "1"
    mymap["b"] = "12"
    l := maptolist(mymap).([]string)
    fmt.printf("(%v, %t)\n", l, l)
}
登入後複製

將輸出:([1 12], []string)

但我總是遇到類型問題並且沒有找到解決方法。使用類型斷言或轉換我遇到了類似的問題。

cannot use myMap (variable of type map[string]string) as map[any]any value in argument to mapToList
登入後複製

我該如何寫maptolist()函數?

它必須作為輸入inputmap map[any]anyinputmap any 因為我想傳遞任何類型的地圖(map[string]customstruct; map[int][]customstruct等)

更新:我在第一次編寫函數時添加了該函數以及有關輸入的更多詳細資訊

解決方法

請參閱本關於泛型的教程語言規格

#any不是變數類型,它是一個type約束,可以使用的類型的描述。您需要使用約束 any 定義類型參數,然後從參數簽章中引用泛型類型。

//                                 | from this point on, k and v are
//                                 | now valid types to use in the function
func maptoslice[k comparable, v any](m map[k]v) []v {
    s := make([]v, 0, len(m))
    for _, v := range m {
        s = append(s, v)
    }
    return s
}
登入後複製

參數m必須是map[k]v,其中kcomparable類型,vany類型。傳回類型 []v 將是與輸入對映中的值具有相同類型的切片。

請注意,any 不能用作映射鍵的約束,因為並非所有類型都可以用作鍵,只有 可比較的 類型。

然後,要呼叫該方法,請傳入滿足約束的類型(例如 map[string][]string),可以選擇明確顯示類型參數。

m := map[string][]string{
    "a": {"b", "c"},
    "d": {"e", "f"},
}
s := maptoslice(m)
// or
t := maptoslice[string, []string](m)
// [[b c] [e f]]
登入後複製

透過明確類型,您可以自行記錄程式碼並擷取任何意外的類型問題。例如,以下程式碼將傳回錯誤:

v := mapToSlice[string, []int](m)
...
./main.go:14:33: cannot use m (variable of type map[string][]string) as map[string][]int value in argument to mapToSlice[string, []int]
登入後複製

以上是GO 中將 Map 轉換為 List 的通用函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24
Vue.js 字符串轉對象的的方法是什麼? Vue.js 字符串轉對象的的方法是什麼? Apr 07, 2025 pm 09:18 PM

使用 JSON.parse() 字符串轉對象最安全高效:確保字符串符合 JSON 規範,避免常見錯誤。使用 try...catch 處理異常,提升代碼健壯性。避免使用 eval() 方法,存在安全風險。對於巨大 JSON 字符串,可考慮分塊解析或異步解析以優化性能。

如何使用JavaScript區分關閉瀏覽器標籤頁和關閉整個瀏覽器? 如何使用JavaScript區分關閉瀏覽器標籤頁和關閉整個瀏覽器? Apr 04, 2025 pm 10:21 PM

如何在瀏覽器上使用JavaScript區分關閉標籤頁和關閉整個瀏覽器?在日常使用瀏覽器的過程中,用戶可能會同時�...

Java資料結構與演算法:雲端運算實戰指南 Java資料結構與演算法:雲端運算實戰指南 May 09, 2024 am 08:12 AM

雲端運算中資料結構和演算法的使用至關重要,用於管理和處理大量資料。常見的資料結構包括數組、列表、哈希表、樹和圖。常用的演算法有排序演算法、搜尋演算法和圖演算法。利用Java的強大功能,開發者可以使用Java集合、執行緒安全資料結構和ApacheCommonsCollections來實作這些資料結構和演算法。

HadiDB:Python 中的輕量級、可水平擴展的數據庫 HadiDB:Python 中的輕量級、可水平擴展的數據庫 Apr 08, 2025 pm 06:12 PM

HadiDB:輕量級、高水平可擴展的Python數據庫HadiDB(hadidb)是一個用Python編寫的輕量級數據庫,具備高度水平的可擴展性。安裝HadiDB使用pip安裝:pipinstallhadidb用戶管理創建用戶:createuser()方法創建一個新用戶。 authentication()方法驗證用戶身份。 fromhadidb.operationimportuseruser_obj=user("admin","admin")user_obj.

Vue Axios請求的URL是否正確 Vue Axios請求的URL是否正確 Apr 07, 2025 pm 10:12 PM

是的,Vue Axios 請求的 URL 必須正確才能請求成功。 url 格式為:協議、主機名、資源路徑,可選查詢字符串。常見錯誤包括缺少協議、拼寫錯誤、重複斜杠、缺少端口號和查詢字符串格式不正確。驗證 URL 正確性的方法:在瀏覽器地址欄手動輸入、使用在線驗證工具或在請求中使用 Vue Axios 的 validateStatus 選項。

redis指令怎麼用 redis指令怎麼用 Apr 10, 2025 pm 08:45 PM

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

redis計數器怎麼實現 redis計數器怎麼實現 Apr 10, 2025 pm 10:21 PM

Redis計數器是一種使用Redis鍵值對存儲來實現計數操作的機制,包含以下步驟:創建計數器鍵、增加計數、減少計數、重置計數和獲取計數。 Redis計數器的優勢包括速度快、高並發、持久性和簡單易用。它可用於用戶訪問計數、實時指標跟踪、遊戲分數和排名以及訂單處理計數等場景。

redis如何清理所有數據 redis如何清理所有數據 Apr 10, 2025 pm 05:06 PM

清理所有 Redis 數據的方法:Redis 2.8 及更高版本: FLUSHALL 命令刪除所有鍵值對。 Redis 2.6 及更低版本: 使用 DEL 命令逐個刪除鍵或使用 Redis 客戶端的刪除方法。替代方法: 重啟 Redis 服務(慎用),或使用 Redis 客戶端(如 flushall() 或 flushdb())。

See all articles