欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GO語(yǔ)言對(duì)數(shù)組切片去重的實(shí)現(xiàn)

 更新時(shí)間:2022年04月20日 14:51:18   作者:抬頭看天空  
本文主要介紹了GO語(yǔ)言對(duì)數(shù)組切片去重的實(shí)現(xiàn),主要介紹了幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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)文章

  • 淺析Go語(yǔ)言中的同步與異步處理

    淺析Go語(yǔ)言中的同步與異步處理

    在開發(fā)過(guò)程中,當(dāng)需要同時(shí)處理多個(gè)操作時(shí),開發(fā)者經(jīng)常面臨同步和異步兩種處理方式的選擇,下面小編就來(lái)和大家詳細(xì)介紹一下Go語(yǔ)言中的同步與異步處理吧
    2023-11-11
  • Golang在Window環(huán)境使用Imagick7的過(guò)程

    Golang在Window環(huán)境使用Imagick7的過(guò)程

    這篇文章主要介紹了Golang在Window環(huán)境使用Imagick7的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • golang給函數(shù)參數(shù)設(shè)置默認(rèn)值的幾種方式小結(jié)(函數(shù)參數(shù)默認(rèn)值

    golang給函數(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-01
  • Golang slice切片操作之切片的追加、刪除、插入等

    Golang slice切片操作之切片的追加、刪除、插入等

    這篇文章主要介紹了Golang slice切片操作之切片的追加、刪除、插入等,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • go-zero熔斷機(jī)制組件Breaker接口定義使用解析

    go-zero熔斷機(jī)制組件Breaker接口定義使用解析

    這篇文章主要為大家介紹了go-zero熔斷機(jī)制組件Breaker接口定義使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • GOLANG版的冒泡排序和快速排序分享

    GOLANG版的冒泡排序和快速排序分享

    這篇文章主要介紹了GOLANG版的冒泡排序和快速排序分享,需要的朋友可以參考下
    2015-03-03
  • golang內(nèi)存對(duì)齊的概念及案例詳解

    golang內(nèi)存對(duì)齊的概念及案例詳解

    為保證程序順利高效的運(yùn)行,編譯器會(huì)把各種類型的數(shù)據(jù)安排到合適的地址,并占用合適的長(zhǎng)度,這就是內(nèi)存對(duì)齊。本文重點(diǎn)給大家介紹golang內(nèi)存對(duì)齊的概念及案例詳解,感興趣的朋友一起看看吧
    2022-02-02
  • Go Asynq異步任務(wù)處理的實(shí)現(xiàn)

    Go Asynq異步任務(wù)處理的實(shí)現(xiàn)

    Asynq是一個(gè)新興的異步任務(wù)處理解決方案,它提供了輕量級(jí)的、易于使用的API,本文主要介紹了Go Asynq異步任務(wù)處理的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-06-06
  • Golang連接并操作PostgreSQL數(shù)據(jù)庫(kù)基本操作

    Golang連接并操作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ù)組

    這篇文章主要介紹了go 動(dòng)態(tài)數(shù)組 二維動(dòng)態(tài)數(shù)組,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論