Golang使用泛型對數(shù)組進行去重的實現(xiàn)
背景
要求寫一個方法,返回去重后的數(shù)組。數(shù)組的類型可能是int64
,也可能是string
,或是其他類型。
如果區(qū)分類型的話,每增加一個新的類型都需要重新寫一個方法。
示例代碼
//對int64數(shù)組進行去重 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ù)組進行去重 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] }
使用泛型實現(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ù)組進行去重的實現(xiàn)的文章就介紹到這了,更多相關(guān)Golang數(shù)組去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang gorm 計算字段和獲取sum()值的實現(xiàn)
這篇文章主要介紹了golang gorm 計算字段和獲取sum()值的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12Go語言之重要數(shù)組類型切片(slice)make,append函數(shù)解讀
這篇文章主要介紹了Go語言之重要數(shù)組類型切片(slice)make,append函數(shù)用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09