Overview
※ 過去何度か上げた内容のエントリの更新版です。
Go で Slice から重複してる要素を排除する unique の処理について実装方法でパフォーマンスが異なるのでこのエントリを書いています。
最近暇つぶしに少し手を出してる leetCode の配列操作の問題に触発されてこのエントリを書いています。
なお過去上げた重複削除関連のエントリは以下
具体的な実装方法
今日のネタにする重複削除の実装についてはいかにコードを挙げています。
パフォーマンスについて
ざっくりパフォーマンスを測定したら以下のような結果になりました。
これだけ見ると Sort した状態の Slice を対象にしてるとはいえ Generics を使った実装は効率がいいことがわかります。
Generics が出てくるまでの実装と比べて for loop 一度で重複を削除できる処理と同じくらいのパフォーマンスになりました。
※ 一方でこんかいのベンチは Flatten かつ Sorted な Slice に限るので、このパフォーマンスを引き出すには条件があるベンチの結果でもあります。
go test -v -bench=. -benchmem goos: darwin goarch: arm64 pkg: sample.com/go-sandbox Benchmark Benchmark/unique_normal Benchmark/unique_normal-10 11301798 90.41 ns/op 48 B/op 2 allocs/op Benchmark/unique_faster Benchmark/unique_faster-10 856136389 1.404 ns/op 0 B/op 0 allocs/op Benchmark/unique_generic Benchmark/unique_generic-10 853362406 1.409 ns/op 0 B/op 0 allocs/op PASS ok sample.com/go-sandbox 4.124s