LoginSignup
5
1

More than 5 years have passed since last update.

[Swift]配列からユニーク値を取り出す時の速度比較

Posted at

動機

あるプロジェクトで楽曲一覧を表示する時、ユニークなリストの生成があまりにも遅かったので、色々速度比較をしてみました。

実験

以下の方法で100回繰り返してみます。
(arrayは0から1000のランダムな配列です。)

方法1

オーソドックスにforで回してみます。

var uniqueArray = [Int]()
for i in array{
    if !uniqueArray.contains(i) {
            uniqueArray.append(i)
    }
}

方法2

Array::reduceを使ってみます。

array.reduce(into: [Int]()) {a,b in
    a.contains(b) ? () : a.append(b)
}

方法3

標準ライブラリのSetを使ってみます。

Array(Set(array))

結果

for方式 Array::reduce方式 Set方式
7.37(sec) 7.58(sec) 0.03(sec)

Setがあまりにも早く誤差が大きそうなので
同じ配列でもう一度 forreduceは100回、Setは1000回、回してみます。

for方式 Array::reduce方式 Set方式
77.56(sec) 75.81(sec) 0.30(sec)

forArray::reduceはほぼ同速
Setが250倍ほど早いですね。

結論

ここまで違うとは思っていませんでした。
Swiftでユニークな配列を作るときは間違いなくSetを使ったほうが良さそうです。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1