найти дубликат числа в golang с использованием хэш-карты

avatar
Vincent
9 августа 2021 в 06:08
168
2
-3

привет, я хочу спросить о findDuplicate в golang

если в питоне я могу это сделать

def findDuplicate(data):
  seen = []
  for number in data:
    if number in seen:
      print(number)
    seen.append(number)
   
  print(seen)
data = [1,2,4,5,6,4]
findDuplicate(data)
#expected output 4

есть ли аналогичная функция в golang, например, "если число видно" на python? Спасибо

Источник
zerkms
9 августа 2021 в 06:15
0

Создайте значение типа map[int]struct{} и проверьте, существует ли там ключ (при условии, что ваш number является целым числом).

nipuna
9 августа 2021 в 06:27
0

Пожалуйста, укажите свой вариант использования, примеры входных данных и ожидаемые результаты.

Ответы (2)

avatar
nipuna
9 августа 2021 в 06:54
3

Вы можете перебирать свои данные и записывать на карту, если она не является дубликатом. И добавьте к срезу дубликатов, если он уже существует на карте. Пример кода показан ниже.

Примечание. Если у вас есть несколько дубликатов с одинаковым значением, этот код показывает все дубликаты. Если вам нужно увидеть одно и то же повторяющееся значение один раз, его следует изменить

.
package main

import (
    "fmt"
)

func main() {
    data := []int{1,2,4,5,6,4}
    findDuplicates(data)
}

func findDuplicates(data []int)  {
    values := make(map[int]struct{})
    var duplicates []int
    for _, d := range data {
        if _, ok := values[d]; ok {
            duplicates = append(duplicates, d)
            continue
        }

        values[d] = struct{}{}
    }

    fmt.Println(duplicates) // Output: [4]
}

бег с детской площадкой

avatar
aherve
9 августа 2021 в 07:50
0

вы ищете карты

Пример использования:

func findDuplicate(data []int) {
    uniq := map[int]bool{}
    for _, i := range data {
        if uniq[i] {
            fmt.Printf("found duplicate %v", i)
        }
        uniq[i] = true
    }
}