Golang : Delete duplicate items from a slice/array
Problem :
Fairly common question or task that a programmer will face from time to time. How to remove duplicate items in a slice ?
For example, this slice has 2 string duplicates :
duplicate := []string{"Hello", "World", "GoodBye", "World", "We", "Love", "Love", "You"}
Solution :
Iterate over the slice and copy over the non duplicate items to a new slice.
package main
import (
"fmt"
)
func printslice(slice []string) {
fmt.Println("slice = ", slice)
//for i := range slice {
// fmt.Println(i, slice[i])
//}
}
func stringInSlice(str string, list []string) bool {
for _, v := range list {
if v == str {
return true
}
}
return false
}
func main() {
duplicate := []string{"Hello", "World", "GoodBye", "World", "We", "Love", "Love", "You"}
printslice(duplicate)
//need to delete duplicate data from slice
// the idea is to copy data over to a new slice without the duplicate
cleaned := []string{}
for _, value := range duplicate {
if !stringInSlice(value, cleaned) {
cleaned = append(cleaned, value)
}
}
printslice(cleaned)
}
Output :
slice = [Hello World GoodBye World We Love Love You]
slice = [Hello World GoodBye We Love You]
NOTE : I'm sure there are more efficient solution out there. But for simple task with small set of data. This solution should be sufficient.
See also : Golang : automatically figure out array length(size) with three dots
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+21.1k Golang : Set and Get HTTP request headers example
+11.6k Golang : Drop cookie to visitor's browser and http.SetCookie() example
+4.8k Golang : Struct field tags and what is their purpose?
+15.2k Golang : Fix cannot convert buffer (type *bytes.Buffer) to type string error
+28k Golang : How to declare kilobyte, megabyte, gigabyte, terabyte and so on?
+4.4k Golang : Detect words using using consecutive letters in a given string
+8.2k Golang : How to control fmt or log print format?
+8k Golang : Detect Pascal, Kebab, Screaming Snake and Camel cases
+24.5k Golang : Get executable name behind process ID example
+11.9k Golang : Handle or parse date string with Z suffix(RFC3339) example
+20.6k Golang : Print leading(padding) zero or spaces in fmt.Printf?
+19.7k Golang : For loop continue,break and range