講義のすべてのオブジェクトを互いに比較したいのですが、some_condition が true の場合、2 番目のオブジェクトを削除する必要があります。
toDelete=[]
lectures.combination(2).each do |first, second|
if (some_condition)
toDelete << second
end
end
toDelete.uniq!
lectures=lectures-toDelete
.each ループ内で削除しようとしたときに奇妙なエラーが発生したため、このアプローチを思いつきました。
これを行うより効率的な方法はありますか?
最初のコメントの後に編集:
私はソースコードに不必要なものを入れないようにしたかったのですが、あなたが尋ねると、講義配列の要素は、大学のさまざまな講義のデータを含むハッシュであり、名前、部屋、講義が開始された暦週などです。終了時間。
このデータを取得するためにすべての学生グループの時間割を解析しますが、一部の講義は複数の学生グループで開催され、教えられる週が異なる場合があるため、相互に比較します。比較したオブジェクトが特定の値のみ異なる場合は、2 番目のオブジェクトの値を最初のオブジェクトに追加し、2 番目のオブジェクトを削除します。それが理由です。
.each-loop での削除時のエラー: Rails の Hash.diff メソッドを使用すると、「シンボルを整数に変換できません」のようなメッセージが表示されました。配列にハッシュしかないことをループの前にテストしましたが、配列に16の整数値が突然あったことがわかりました...
9000 個のハッシュがある場合、デバッグは非常に困難です。
編集: サンプル データ:
lectures = [ {:day=>0, :weeks=>[11, 12, 13, 14], :begin=>"07:30", :end=>"09:30", :rooms=>["Li201", "G221"], :name=>"TestSubject1", :kind=>"Vw", :lecturers=>["WALDM"], :tut_groups=>["11INM"]},
{:day=>0, :weeks=>[11, 12, 13, 14], :begin=>"07:30", :end=>"09:30", :rooms=>["Li201", "G221"], :name=>"TestSubject1", :kind=>"Vw", :lecturers=>["WALDM"], :tut_groups=>["11INM"]} ]