GO語(yǔ)言對(duì)數(shù)組切片去重的實(shí)現(xiàn)
Go語(yǔ)言是2007年由Google開發(fā)的一種靜態(tài)強(qiáng)類型的編譯型語(yǔ)言,其語(yǔ)法結(jié)構(gòu)上與C非常接近。在垃圾回收、錯(cuò)誤處理以及包庫(kù)方面比C要方便的多,因此從開發(fā)速度上來(lái)講比C要快的多,而運(yùn)行速度也接近于C語(yǔ)言。以下實(shí)現(xiàn)GO語(yǔ)言對(duì)數(shù)組切片去重
1.go中沒有去重方法
自己實(shí)現(xiàn)
package main import ( ? ? "fmt" ) func main() { ? ? s := []string{"hello", "world", "hello", "golang", "hello", "ruby", "php", "java"} ? ? fmt.Println(removeDuplicateElement(s)) //output: hello world golang ruby php java } func removeDuplicateElement(languages []string) []string { ? ? result := make([]string, 0, len(languages)) ? ? temp := map[string]struct{}{} ? ? for _, item := range languages { ? ? ? ? if _, ok := temp[item]; !ok { ? ? ? ? ? ? temp[item] = struct{}{} ? ? ? ? ? ? result = append(result, item) ? ? ? ? } ? ? } ? ? return result }
2.自定義一個(gè)適配多個(gè)切片類型的去重器
下面對(duì)嗎主要看
1.自定義sliceError結(jié)構(gòu)體并實(shí)現(xiàn)Error方法
2.最后default中返回sliceError中自動(dòng)會(huì)調(diào)用Errors使轉(zhuǎn)換成error。
package common import ( ? ? "fmt" ) type sliceError struct { ? ? msg string } func (e *sliceError) Error() string { ? ? return e.msg } func Errorf(format string, args ...interface{}) error { ? ? msg := fmt.Sprintf(format, args...) ? ? return &sliceError{msg} } func removeDuplicateElement1(originals interface{}) (interface{}, error) { ? ? temp := map[string]struct{}{} ? ? switch slice := originals.(type) { ? ? case []string: ? ? ? ? result := make([]string, 0, len(originals.([]string))) ? ? ? ? for _, item := range slice { ? ? ? ? ? ? key := fmt.Sprint(item) ? ? ? ? ? ? if _, ok := temp[key]; !ok { ? ? ? ? ? ? ? ? temp[key] = struct{}{} ? ? ? ? ? ? ? ? result = append(result, item) ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? return result, nil ? ? case []int64: ? ? ? ? result := make([]int64, 0, len(originals.([]int64))) ? ? ? ? for _, item := range slice { ? ? ? ? ? ? key := fmt.Sprint(item) ? ? ? ? ? ? if _, ok := temp[key]; !ok { ? ? ? ? ? ? ? ? temp[key] = struct{}{} ? ? ? ? ? ? ? ? result = append(result, item) ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? return result, nil ? ? default: ? ? ? ? err := Errorf("Unknown type: %T", slice) ? ? ? ? return nil, err ? ? } }
補(bǔ)充:
通過(guò)map鍵的唯一性去重(推薦)
//通過(guò)map鍵的唯一性去重 func RemoveRepeatedElement(s []int) []int { ?? ?result := make([]int, 0) ?? ?m := make(map[int]bool) //map的值不重要 ?? ?for _, v := range s { ?? ??? ?if _, ok := m[v]; !ok { ?? ??? ??? ?result = append(result, v) ?? ??? ??? ?m[v] = true ?? ??? ?} ?? ?} ?? ?return result }
通過(guò)map鍵的唯一性去重
定義一個(gè)新切片(數(shù)組),存放原數(shù)組的第一個(gè)元素,然后將新切片(數(shù)組)與原切片
(數(shù)組)的元素一一對(duì)比,如果不同則存放在新切片(數(shù)組)中。
func RemoveRepeatedElement(arr []int) (newArr []int) { ?? ?newArr = make([]int, 0) ?? ?for i := 0; i < len(arr); i++ { ?? ??? ?repeat := false ?? ??? ?for j := i + 1; j < len(arr); j++ { ?? ??? ??? ?if arr[i] == arr[j] { ?? ??? ??? ??? ?repeat = true ?? ??? ??? ??? ?break ?? ??? ??? ?} ?? ??? ?} ?? ??? ?if !repeat { ?? ??? ??? ?newArr = append(newArr, arr[i]) ?? ??? ?} ?? ?} ?? ?return }
到此這篇關(guān)于GO語(yǔ)言對(duì)數(shù)組切片去重的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)GO 數(shù)組切片去重內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang在Window環(huán)境使用Imagick7的過(guò)程
這篇文章主要介紹了Golang在Window環(huán)境使用Imagick7的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11golang給函數(shù)參數(shù)設(shè)置默認(rèn)值的幾種方式小結(jié)(函數(shù)參數(shù)默認(rèn)值
在日常開發(fā)中我們有時(shí)候需要使用默認(rèn)設(shè)置,下面這篇文章主要給大家介紹了關(guān)于golang給函數(shù)參數(shù)設(shè)置默認(rèn)值的幾種方式小結(jié)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01go-zero熔斷機(jī)制組件Breaker接口定義使用解析
這篇文章主要為大家介紹了go-zero熔斷機(jī)制組件Breaker接口定義使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Go Asynq異步任務(wù)處理的實(shí)現(xiàn)
Asynq是一個(gè)新興的異步任務(wù)處理解決方案,它提供了輕量級(jí)的、易于使用的API,本文主要介紹了Go Asynq異步任務(wù)處理的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-06-06Golang連接并操作PostgreSQL數(shù)據(jù)庫(kù)基本操作
PostgreSQL是常見的免費(fèi)的大型關(guān)系型數(shù)據(jù)庫(kù),具有豐富的數(shù)據(jù)類型,也是軟件項(xiàng)目常用的數(shù)據(jù)庫(kù)之一,下面這篇文章主要給大家介紹了關(guān)于Golang連接并操作PostgreSQL數(shù)據(jù)庫(kù)基本操作的相關(guān)資料,需要的朋友可以參考下2022-09-09詳解go 動(dòng)態(tài)數(shù)組 二維動(dòng)態(tài)數(shù)組
這篇文章主要介紹了go 動(dòng)態(tài)數(shù)組 二維動(dòng)態(tài)數(shù)組,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07