Golang使用泛型對數(shù)組進(jìn)行去重的實(shí)現(xiàn)
背景
要求寫一個(gè)方法,返回去重后的數(shù)組。數(shù)組的類型可能是int64,也可能是string,或是其他類型。
如果區(qū)分類型的話,每增加一個(gè)新的類型都需要重新寫一個(gè)方法。
示例代碼
//對int64數(shù)組進(jìn)行去重
func DeDuplicateInt64Slice(array []int64) []int64 {
mp := make(map[int64]struct{})
idx := 0
for _, value := range array {
if _, ok := mp[value]; ok {
continue
}
array[idx] = value
idx = idx + 1
mp[value] = struct{}{}
}
return array[:idx]
}
//對string數(shù)組進(jìn)行去重
func DeDuplicateStringSlice(array []string) []string {
mp := make(map[string]struct{})
idx := 0
for _, value := range array {
if _, ok := mp[value]; ok {
continue
}
array[idx] = value
idx = idx + 1
mp[value] = struct{}{}
}
return array[:idx]
}
使用泛型實(shí)現(xiàn)后的代碼
//對數(shù)組去重
func DeDuplicateSlice[T any](array []T) []T {
mp := make(map[any]struct{})
idx := 0
for _, value := range array {
if _, ok := mp[value]; ok {
continue
}
array[idx] = value
idx = idx + 1
mp[value] = struct{}{}
}
return array[:idx]
}
其中:
T 是類型參數(shù),在函數(shù)體里的用法跟其他數(shù)據(jù)類型(如int一樣)
any 是類型約束,這里的any可以是任何類型,也就是沒有約束
// any is an alias for interface{} and is equivalent to interface{} in all ways.
type any = interface{}到此這篇關(guān)于Golang使用泛型對數(shù)組進(jìn)行去重的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Golang數(shù)組去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang gorm 計(jì)算字段和獲取sum()值的實(shí)現(xiàn)
這篇文章主要介紹了golang gorm 計(jì)算字段和獲取sum()值的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Go語言之重要數(shù)組類型切片(slice)make,append函數(shù)解讀
這篇文章主要介紹了Go語言之重要數(shù)組類型切片(slice)make,append函數(shù)用法,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
在Golang中實(shí)現(xiàn)RSA算法的加解密操作詳解
RSA 是一種非對稱加密算法,廣泛使用于數(shù)據(jù)的安全傳輸,crypto/rsa 是 Golang 中實(shí)現(xiàn)了 RSA 算法的一個(gè)標(biāo)準(zhǔn)庫,提供了生成公私鑰對、加解密數(shù)據(jù)、簽名和驗(yàn)簽等功能,本文給大家介紹了在Golang中實(shí)現(xiàn)RSA算法的加解密操作,需要的朋友可以參考下2023-12-12

