忽略順序的 Go 語言去重程式


在使用 Go 語言切片時,通常需要去除切片中的重複元素。雖然有很多方法可以做到這一點,但一種特別有用的方法是去除重複元素同時忽略元素的順序。例如,當您想要比較兩個切片是否相等,而不關心元素的順序時,這將非常有用。

在本文中,我們將探討一個簡單的 Go 語言程式,該程式可以去除切片中的重複元素,同時忽略元素的順序。我們將逐步分解程式,解釋其工作原理。

步驟 1:定義 removeDuplicates 函式

我們將首先定義一個名為 removeDuplicates 的函式,該函式接收一個整數切片作為輸入,並返回一個新的切片,其中只包含唯一的元素。在這個函式中,我們宣告兩個變數:unique,它將儲存唯一的元素;seen,它是一個 map,將幫助我們跟蹤我們已經見過的元素。

func removeDuplicates(elements []int) []int {
   unique := []int{}
   seen := map[int]bool{}
   // ...
}

步驟 2:迴圈遍歷輸入切片並檢查重複項

接下來,我們將使用 for 迴圈遍歷輸入切片,迭代切片中的每個元素。對於每個元素,我們檢查它是否已經存在於 seen map 中。如果不存在,我們將它新增到 unique 切片中,並在 map 中將其標記為已檢視。

for _, element := range elements {
   if _, ok := seen[element]; !ok {
      unique = append(unique, element)
      seen[element] = true
   }
}

步驟 3:返回包含唯一元素的新切片

最後,我們返回 unique 切片,該切片現在只包含輸入切片中的唯一元素。

return unique

將所有內容放在一起,完整的 removeDuplicates 函式如下所示

示例

package main

import "fmt"

func removeDuplicates(elements []int) []int {
   unique := []int{}
   seen := map[int]bool{}
   for _, element := range elements {
      if _, ok := seen[element]; !ok {
         unique = append(unique, element)
         seen[element] = true
      }
   }
   return unique
}

func main() {
   // Example usage
   nums := []int{1, 2, 3, 2, 4, 3}
   uniqueNums := removeDuplicates(nums)
   fmt.Println(uniqueNums)
}

輸出

[1 2 3 4]

結論

在本文中,我們探討了一個簡單的 Go 語言程式,該程式可以去除切片中的重複元素,同時忽略元素的順序。透過逐步分解程式,我們展示瞭如何使用 map 來跟蹤已經見過的元素,以及如何建立一個只包含唯一元素的新切片。這種技術在需要去除重複元素同時忽略切片中元素順序的各種情況下都非常有用。

更新於:2023年4月18日

91 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告