どうも、ちょげ(@chogetarou)です。
スライス(Slice)の重複している同じ要素を削除する方法を紹介します。
方法

スライス(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]
コメント