[go] Go 언어에서의 데이터 중복 제거 방법

Go 언어에서는 중복된 데이터를 제거하는 다양한 방법을 제공합니다. 중복된 데이터를 제거하는 것은 데이터 처리 및 분석 작업에서 중요한 단계입니다. 이번 블로그 포스트에서는 Go 언어에서 중복된 데이터를 제거하는 방법에 대해 알아보겠습니다.

1. Slice 사용

package main

import (
	"fmt"
)

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

	for _, value := range slice {
		if encountered[value] == true {
			continue
		}
		encountered[value] = true
		result = append(result, value)
	}

	return result
}

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

위의 예제에서는 removeDuplicates 함수를 사용하여 중복된 데이터를 제거합니다. encountered 변수는 이미 등장한 데이터를 추적하기 위한 맵입니다. 데이터 슬라이스를 순회하면서 encountered 맵에 이미 등장한 데이터인지 확인하고, 등장하지 않은 데이터라면 결과 슬라이스에 추가합니다. 이렇게 중복된 데이터를 제거한 결과를 반환합니다.

2. Map 사용

package main

import (
	"fmt"
)

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

	for v := range slice {
		if !encountered[slice[v]] {
			encountered[slice[v]] = true
			result = append(result, slice[v])
		}
	}

	return result
}

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

또 다른 방법은 맵을 사용하여 중복된 데이터를 제거하는 것입니다. 위의 예제에서는 encountered 맵을 사용하여 이미 등장한 데이터를 추적합니다. 데이터를 순회하며 맵에 데이터가 없는 경우에만 결과 슬라이스에 추가합니다. 이렇게 중복된 데이터를 제거한 결과를 반환합니다.

3. Sort 후 중복 제거

package main

import (
	"fmt"
	"sort"
)

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

	for i := 0; i < len(slice)-1; i++ {
		if slice[i] != slice[i+1] {
			result = append(result, slice[i])
		}
	}

	result = append(result, slice[len(slice)-1])

	return result
}

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

또 다른 방법은 데이터를 먼저 정렬한 후에 중복을 제거하는 것입니다. 위의 예제에서는 sort.Ints 함수를 사용하여 데이터를 오름차순으로 정렬한 후, 연속하는 데이터가 다른 경우에만 결과 슬라이스에 추가합니다. 이렇게 중복된 데이터를 제거한 결과를 반환합니다.

위의 예제들은 정수 데이터를 사용하였지만, 해당 방법들은 다른 데이터 유형에도 적용될 수 있습니다. 중복된 데이터를 효율적으로 제거하여 데이터 처리 작업을 더욱 효과적으로 수행할 수 있습니다.