好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > golang 字符串切片去重實例

golang 字符串切片去重實例

熱門標簽:上海極信防封電銷卡價格 地圖標注免費定制店 湛江crm外呼系統排名 不封卡外呼系統 宿遷便宜外呼系統代理商 仙桃400電話辦理 寧波語音外呼系統公司 重慶慶云企業400電話到哪申請 鄭州智能語音電銷機器人價格

實現目的:實現字符串切片去重,只是兩個字符完全相同時,去除一個。

實現方式:考慮兩種,一種是常規的雙重循環去除,另一種是利用map的key的唯一性實現。

1、通過雙重循環來過濾重復元素

方法1,

思路:利用for雙重循環,新建一個slice,遍歷原slice中的每一個元素,每一次判斷這個元素和后面元素是否相同,若相同則去除,若不同則存入新slice中,判斷本元素后,再繼續判斷下一個元素,直到判斷完畢。

package main 
import "fmt" 
func main() {
 var arr = []string{"hello", "hi", "world", "hi", "china", "hello", "hi"}
 fmt.Println(RemoveRepeatedElement(arr))
}
 
//去除重復字符串
func RemoveRepeatedElement(arr []string) (newArr []string) {
 newArr = make([]string, 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 newArr
}

方法2,

思路:先對原slice使用sort進行排序,后面思路同方法1。

package main 
import(
 "fmt"
 "sort"
)
 
 //去除重復字符串和空格
func RemoveDuplicatesAndEmpty(a []string) (ret []string){
 a_len := len(a)
 for i:=0; i  a_len; i++{
  if (i > 0  a[i-1] == a[i]) || len(a[i])==0{
   continue;
  }
  ret = append(ret, a[i])
 }
 return
}
 
func main(){
 a := []string{"hello", "", "world", "yes", "hello", "nihao", "shijie", "hello", "yes", "nihao","good"}
 sort.Strings(a)
 fmt.Println(a)
 fmt.Println(RemoveDuplicatesAndEmpty(a))
}

2、通過字典來過濾

思路:因為字典的主鍵唯一,所以可以用來判斷元素是否重復。

package main 
import (
 "fmt"
)
 
func main() {
 testStr := make([]string, 0)
 testStr = append(testStr, "haha", "hehe", "hoho", "hehe") 
 afterStr := removeDuplicate(testStr)
 fmt.Println(afterStr)
}
 
// 通過map主鍵唯一的特性過濾重復元素
func removeDuplicate(arr []string) []string {
 resArr := make([]string, 0)
 tmpMap := make(map[string]interface{})
 for _, val := range arr {
  //判斷主鍵為val的map是否存在
  if _, ok := tmpMap[val]; !ok {
   resArr = append(resArr, val)
   tmpMap[val] = nil
  }
 } 
 return resArr
}

3、效率考慮

程序算法有兩個指標:運行時間、內存消耗(即:時間復雜度、空間復雜度)。

以上兩個方法,當數據量小和數據量大時分別考慮用雙重for循環方法和map主鍵唯一方法。具體需要數據驗證。

補充:Golang中如何刪除切片的重復元素

思想如下:利用map中key唯一的特性將slice中的數據保存到map的key中

但是要注意key的類型,有些數值不能做為key

Map 是一種無序的鍵值對的集合。Map 最重要的一點是通過 key 來快速檢索數據,key 類似于索引,指向數據的值。

Map 是一種集合,所以我們可以像迭代數組和切片那樣迭代它。不過,Map 是無序的,我們無法決定它的返回順序,這是因為 Map 是使用 hash 表來實現的

Golang中map中key的類型

golang中的map,其中的 key 可以是很多種類型,比如 bool, 數字,string, 指針, channel , 還有只包含前面幾個類型的 interface types, structs, arrays

顯然,slice, map 還有 function 是不可以了,因為這幾個沒法用 == 來判斷

原文如下:

As mentioned earlier, map keys may be of any type that is comparable. The language spec defines this precisely, but in short, comparable types are boolean, numeric, string, pointer, channel, and interface types, and structs or arrays that contain only those types. Notably absent from the list are slices, maps, and functions; these types cannot be compared using ==, and may not be used as map keys.

// 刪除切片中重復的數據
package main
import (
 "fmt"
 "reflect"
 "sort"
)
func main() {
 b := []string{"a", "b", "c", "c", "e", "f", "a", "g", "b", "b", "c"}
 sort.Strings(b)
 fmt.Println(Duplicate(b))
 c := []int{1, 1, 2, 4, 6, 7, 8, 4, 3, 2, 5, 6, 6, 8}
 sort.Ints(c)
 fmt.Println(DeleteDuplicateValue(c))
}
func Duplicate(a interface{}) (ret []interface{}) {
 fmt.Printf("a : %+v\n", a)
 va := reflect.ValueOf(a)
 fmt.Printf("va : %+v\n", va)
 for i := 0; i  va.Len(); i++ {
 if i > 0  reflect.DeepEqual(va.Index(i-1).Interface(), va.Index(i).Interface()) {
 continue
 }
 ret = append(ret, va.Index(i).Interface())
 }
 return ret
}
// 這種方式比較容易理解
func DeleteDuplicateValue(s []int) (ret []int) {
 fmt.Printf("s :%+v\n", s)
 tmpM := make(map[int]int) // key的類型要和切片中的數據類型一致
 for _, v := range s {
 tmpM[v] = 1
 }
 // 先清空s
 s = []int{}
 for i, _ := range tmpM {
 s = append(s, i)
 }
 return s
}

輸出的結果如下:

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Golang二維切片初始化的實現
  • golang切片擴容規則實現
  • golang修改結構體中的切片值方法
  • golang 切片截取參數方法詳解
  • golang將切片或數組根據某個字段進行分組操作
  • golang切片反序實例
  • golang 刪除切片的某個元素及剔除切片內的零值方式

標簽:電子產品 儋州 海南 西雙版納 青海 遼寧 物業服務 安康

巨人網絡通訊聲明:本文標題《golang 字符串切片去重實例》,本文關鍵詞  golang,字符串,切片,去重,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang 字符串切片去重實例》相關的同類信息!
  • 本頁收集關于golang 字符串切片去重實例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 日韩欧美推理片免费在线播放| 国产香蕉75在线播放| 梁朝伟把汤唯的奶吸硬了| 精品亚洲一区二区在线观看 | 国产91麻豆精品| 下肢腿部抬高垫S腿垫翻身垫| 用点力今晚就我们两个| 欧美另类69XXXXX| 色婷婷国产精品秘?免| 99这里只有精品在线| 夜妖娆在线直播| 亚洲色图综合图区| 亚洲一卡2卡4卡5卡6卡残暴在线| 聊斋艳谭| 精品精品国产高清A级毛片| 色情亂伦国产AV| 古代共妻嗯啊高h宋氏共妻| 台湾四级老片空绢艳谈| 91风吟鸣唱精品系列嫩模| 跪好鞭打调教含玉势| 抵住宫口注入精子H| 舔女人下面视频| 校园性教k8播放| 淫欲的代价在线| 99久久综合精品免费| 国产又粗又猛又爽又黄的学生视频| 迷人你的保姆免费观看| 嗯啊好厉害| 91香草传媒软件特色| 大婕子的后庭花| 国产毛片精品| 国产激情影院| 国产精品久久久久久精品毛片苍井空| 99久久精品久久久久久婷婷| 西班牙无遮掩大尺度电影| 巜交换上司夫妇3中文字幕九牛| 鱿鱼b25777直接进入| 香港三级之丈夫瘫痪的电影| 他的小丫头终于属于他了| 亚洲黄色中文字幕| 免费无码婬AAAA片在线漫画|