Closed Moriya-Taichi closed 3 years ago
また速度的なことを考えるとデイスクとやりとりをする fetchはループの中で行うべきではないと考えるので SELECT INで一気に持ってくるのを考える
自分のアルゴリズム力はガバガバなので レーベンシュタイン距離をどうしようか悩んだが 差分更新に関してはこちらの記事でSwiftにメソッドが存在しているとのこと https://qiita.com/shiz/items/0e363219a0151d790d03
Swift5.1からはArray.difference(from: Array)
で2つのリスト間の差分が行える
この結果はinsert
とremove
の形で返ってくる。
どちらも(offset, element, associatedWith)
を持つ
つまりは新しく増えたのと消されたのが分かる。
今欲しいのは消されたもの
増えたもの
変わってないもの
の3つなので
元の配列からinsertもdeleteもされていないインデックスを変わってないものとして増やした扱いやすい
差分の算出メソッドを作る
What
重複を防ぐ為に
SELECT FROM hoge WHERE id IN <ids>
でidのリストを渡して 保存されているものは値を更新 保存されていないものは新しく作成 という形で操作しなければならない ループ内でfilter{ hoge.contains() }
を使う方法もあるが計算量的にはO(n^2)
なので微妙に思える 言語は違うがJSでは一定数までは上記の二重ループでも早いので毛嫌いするほどではないと思われるがリレーションがの場合はさらにそこから更新対象のリレーションの差分を見て更新する