deduplicate の罠
ちょっとハマったのでメモ
TL; DR
deduplicate(a: seq[T]) をそのまま使うと、低速だよ($ O(N^2))
使うときは先にソートしてisSorted = true にしてね → a.sorted.deduplicate(isSoted = True)
deduplicated
これです。配列を渡すと重複する要素を削除した配列を返してくれます。reference に "Setting the optional argument isSorted to true (default: false) uses a faster algorithm for deduplication." という不穏な言葉が見えますね…… isSorted を入れた場合と入れない場合の比較
code:nim
let c = a.sorted.deduplicate(isSorted = true)
code:nim
let c = a.sorted.deduplicate
38行目が違います。
よっぽどのことがない限り、sort して使いましょう。sort できない場合は hashset などを使って自力で実装しましょう(かなしい)
おまけ
別にこれでいいという話もあります、deduplicated くんのアイデンティティが危うい