Edited at

GoのSliceの重複をMapを使って削除する


GoのSliceの重複をMapを使って削除する


ポイント


  • mapの第二引数は、keyが存在するかどうかの真偽値なのでそれを使う

  • Sliceのある値が存在するかどうかをMapで表し、MapのKeyにSliceの実際の値を入れ、Valueに存在することを表すstruct{}{}を入れる

参考: 急いで学ぶGo lang#7 range・Array・slice・map | Developers.IO


コード

package main

import "fmt"

func main() {
list := []string{"Go", "Java", "Python", "Go", "Ruby", "Go"}

m := make(map[string]struct{})

newList := make([]string, 0)

for _, element := range list {
// mapでは、第二引数にその値が入っているかどうかの真偽値が入っている
if _, ok := m[element]; !ok {
m[element] = struct{}{}
newList = append(newList, element)
}
}

fmt.Printf("mapの中身 %#v\n", m)
fmt.Printf("重複削除後 %#v\n", newList)
}


実行結果

mapの中身 map[string]struct {}{"Go":struct {}{}, "Java":struct {}{}, "Python":struct {}{}, "Ruby":struct {}{}}

重複削除後 []string{"Go", "Java", "Python", "Ruby"}

実際のコードはこちら


参考にさせていただいた記事

急いで学ぶGo lang#7 range・Array・slice・map | Developers.IO