如何在 Go 語言中去除切片中的重複值?


在 Go 語言中,切片是一個動態大小的陣列,可以儲存同一型別元素的集合。有時,您可能需要從切片中刪除重複值,以確保切片中的每個元素都是唯一的。在本文中,我們將討論如何在 Go 語言中從切片中刪除重複值。

方法 1:使用對映

在 Go 語言中,從切片中刪除重複值的一種方法是使用對映。對映是 Go 語言中內建的一種型別,允許您儲存鍵值對。我們可以使用對映來跟蹤切片中唯一的元素,然後從這些元素建立一個新的切片。

示例

以下是如何使用對映從切片中刪除重複值的示例:

package main

import "fmt"

func removeDuplicates(slice []int) []int {
   // Create a map to store unique elements
   seen := make(map[int]bool)
   result := []int{}
   
   // Loop through the slice, adding elements to the map if they haven't been seen before
   for _, val := range slice {
      if _, ok := seen[val]; !ok {
         seen[val] = true
         result = append(result, val)
      }
   }  
   return result
}

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

輸出

[1 2 3 4 5]

在此示例中,我們建立一個名為“seen”的新對映來儲存唯一元素。然後,我們遍歷輸入切片並將元素新增到對映中(如果之前未見過)。如果之前見過某個元素,則跳過它。最後,我們返回一個僅包含唯一元素的新切片。

以下是如何使用此函式從切片中刪除重複值:

input := []int{1, 2, 2, 3, 3, 3, 4, 5, 5}
output := removeDuplicates(input)
fmt.Println(output) // Output: [1 2 3 4 5]

方法 2:使用巢狀迴圈

在 Go 語言中,從切片中刪除重複值的另一種方法是使用巢狀迴圈。此方法不如使用對映高效,但更容易理解和實現。

示例

以下是如何使用巢狀迴圈從切片中刪除重複值的示例:

package main

import "fmt"

func removeDuplicates(slice []int) []int {
   result := []int{}

   // Loop through the slice and add unique elements to the result slice
   for i := 0; i < len(slice); i++ {
      // Check if the element has already been added to the result slice
      duplicate := false
      for j := 0; j < len(result); j++ {
         if slice[i] == result[j] {
            duplicate = true
            break
         }
      }
      // Add the element to the result slice if it's not a duplicate
      if !duplicate {
         result = append(result, slice[i])
      }
   }
   return result
}

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

輸出

[1 2 3 4]

在此示例中,我們遍歷輸入切片並檢查每個元素是否已新增到結果切片中。如果某個元素不是重複的,則將其新增到結果切片中。最後,我們返回結果切片。

以下是如何使用此函式從切片中刪除重複值:

input := []int{1, 2, 2, 3, 3, 3, 4, 5, 5}
output := removeDuplicates(input)
fmt.Println(output) // Output: [1 2 3 4 5]

結論

在本文中,我們討論了兩種從 Go 語言中的切片中刪除重複值的不同方法。第一種方法使用對映來儲存唯一元素,而第二種方法使用巢狀迴圈來將每個元素與切片中所有先前的元素進行比較。雖然基於對映的方法效率更高,但巢狀迴圈方法更容易理解和實現。

無論您選擇哪種方法,從切片中刪除重複值在許多不同的應用程式中都是一項有用的操作。透過我們這裡介紹的技術,您應該能夠輕鬆地從 Go 語言程式碼中的任何切片中刪除重複項。

請記住,這些方法假設輸入切片不太大。如果輸入切片非常大,您可能需要考慮使用更有效的演算法或資料結構來刪除重複項。此外,如果輸入切片包含非基本型別的元素,則需要定義自己的相等函式來檢查重複項。

更新於: 2023年4月25日

6K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告