使用Array.combination()时删除的最佳方法是什么?

时间:2013-07-23 21:43:44

标签: ruby loops

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

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

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

有更有效的方法吗?

首次评论后编辑:

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

我会解析所有学生群体的时间表来获取这些数据,但由于某些课程是在多个学生小组中进行的,而且这些课程在他们上课的几周内有时会有所不同,因此我将它们相互比较。如果比较的仅在某些值上不同,我将第二个对象的值添加到第一个对象并删除第二个对象。这就是原因。

在.each-loop中删除时的错误:当使用Rails Hash.diff方法时,我得到类似“无法将符号转换为整数”的内容。事实证明,数组中突然有一个16的Integer值,虽然我在循环之前测试了数组中只有哈希...

如果你有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"]} ]

1 个答案:

答案 0 :(得分:1)

你的意思是这样的吗?

cleaned_lectures = lectures.combination(2).reject{|first, second| some_condition}