[Golang]スライス(Slice)の重複を削除するには?

Go

どうも、ちょげ(@chogetarou)です。

スライス(Slice)の重複している同じ要素を削除する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

スライス(Slice)の重複している同じ要素を削除するには、for文を使います。

まず、値がboolのマップ、重複を削除したスライスを格納する変数を用意します。
(マップのキーの型は、スライスの要素と同じ)

次に、スライスをfor文でループし、ループ処理で条件分岐します。

条件分岐には、用意したマップのループ変数の値が「false」である条件を指定します。

最後に、条件分岐でマップのループ変数の値を「true」に変換、用意したスライスにループ変数を追加します。

//T=スライスの型, mySlice=対象のスライス
keys := make(map[T]bool) //重複のチェック用
result := []T{} //重複を削除したスライスを格納

for _, item := range mySlice {
    if _, value := keys[item]; !value { //重複しているかチェック
         keys[item] = true
	 result = append(result, item) //重複していない場合は、resultに要素を追加
    }
}

上記の処理は、用意したスライスにループしたスライス(Slice)の重複を削除したスライスを格納します。

使用例

package main

import "fmt"

func removeDuplicate(slice []int) []int {
	keys := make(map[int]bool)
	result := []int{}
	for _, item := range slice {
		if _, value := keys[item]; !value {
			keys[item] = true
			result = append(result, item)
		}
	}
	return result
}

func main() {
	numbers := []int{1, 1, 5, 2, 1, 3, 4, 3, 5, 2}

	result := removeDuplicate(numbers)

	fmt.Println(result)
}
出力:
[1 5 2 3 4]

コメント

タイトルとURLをコピーしました