-1

我想比较讲座中的每个对象,如果 some_condition 为真,则必须删除第二个对象:

toDelete=[]
lectures.combination(2).each do |first, second|
  if (some_condition)
   toDelete << second
  end
end
toDelete.uniq!
lectures=lectures-toDelete

我在尝试删除 .each 循环时遇到了一些奇怪的错误,所以我想出了这种方法。

有没有更有效的方法来做到这一点?

在第一条评论后编辑:

我想保留源代码中没有不必要的东西,但现在你问:lectures 数组的元素是包含不同大学讲座数据的哈希值,例如名称、房间、授课和开始的日历周以及时间结束。

我解析所有学生组的时间表以获取这些数据,但由于一些讲座在多个学生组中举行,而且这些课程有时在授课周数上有所不同,因此我将它们相互比较。如果比较的只是某些值不同,我将第二个对象的值添加到第一个对象并删除第二个对象。这就是为什么。

在 .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"]} ]
4

1 回答 1

1

你的意思是这样的?

cleaned_lectures = lectures.combination(2).reject{|first, second| some_condition}
于 2013-07-23T22:43:17.220 回答