Я полагаю, что действительно простой и быстрый способ получить количество уникальных значений - это использовать карту:
data := map[int]bool{}
cnt := 0 // count of unique values
for _, i := range intSlice {
if dup, ok := data[i]; !ok {
// we haven't seen value i before, assume it's unique
data[i] = false // add to map, mark as non-duplicate
cnt++ // increment unique count
} else if !dup {
// we have seen value i before, but this is only the second time
cnt-- // unique count goes down here
data[i] = true // mark this value as known duplicate
}
}
В конце этого цикла у вас будет cnt
сколичество уникальных значений, и вы можете выполнить итерацию карты data
для всех ключей со значением false
, чтобы получить уникальные значения, которые вы нашли в срезе.Все ключи, объединенные в основном, являются значениями в срезе, не дублируются.