0

How can i remove duplicate structs in a Go slice:

[{ 0 0 A  16 {0 0 0} {nigeria abia} {0 0}  female 0 0 false   []  map[] {false false false false false false false false false}}
 { 0 0 A  16 {0 0 0} {nigeria abia} {0 0}  female 0 0 false   []  map[] {false false false false false false false false false}}

  { 0 0 B  17 {0 0 0} {nigeria abia} {0 0}  female 0 0 false   []  map[] {false false false false false false false false false}}
   { 0 0 B  17 {0 0 0} {nigeria abia} {0 0}  female 0 0 false   []  map[] {false false false false false false false false false}}
   
    { 0 0 D  15 {0 0 0} {nigeria abia} {0 0}  female 0 0 false   []  map[] {false false false false false false false false false}}
     { 0 0 D  15 {0 0 0} {nigeria abia} {0 0}  female 0 0 false   []  map[] {false false false false false false false false false}}]

I want to return only 1 instance of each struct in this slice.

I tried this function

func unique(src []Person) []Person {
    keys := make(map[*Person]bool)
    list := []Person{}
    for _, entry := range src {
        if _, value := keys[&entry]; !value {
            keys[&entry] = true
            list = append(list, entry)
        }
    }
    return list
}

but it returns only 1 item: [{ 0 0 A 16 {0 0 0} {nigeria abia} {0 0} female 0 0 false [] map[] {false false false false false false false false false}}]

vs what I want:

[
 { 0 0 A  16 {0 0 0} {nigeria abia} {0 0}  female 0 0 false   []  map[] {false false false false false false false false false}}

  
   { 0 0 B  17 {0 0 0} {nigeria abia} {0 0}  female 0 0 false   []  map[] {false false false false false false false false false}}

 
     { 0 0 D  15 {0 0 0} {nigeria abia} {0 0}  female 0 0 false   []  map[] {false false false false false false false false false}}]
Obiajulu
  • 27
  • 3

0 Answers0