サウンドバイトを保存するテーブルがあります。テーブルを読み取ってからテーブルを再読み取りし、重複に近いレコードを削除するループを作成しようとしました。
私のコードは次のようなものです:
Numbersound.where{id != nil}.order(:id).each do |sound|
Numbersound.where{(id != sound.id) & (sound.wavelength = wavelength)}.each do |duplicate|
if (duplicate.wavecount != nil)
#compare wave files and check if the same
if MatchSound.compare(sound.frames, sound.wavecount, duplicate.frames, duplicate.wavecount, 0.03)
Numbersound.delete(duplicate.id)
end
end
end
問題は、削除されたレコードをサウンド配列から削除する必要があることです。そうしないと、常に少なくとも 1 つの一致 (それ自体) が存在します。
かなり長い計算を実行する必要があるため、SQL を使用して比較を行うことはできません。