我有一组具有以下属性的 Race 对象:
- 方式
- race_period_id
- track_id
我想收集那些 Race 对象——其中 way 和 track_id 属性值相同——在一个名为 plural_array 的新数组中。 (基本上,每个重复的 Race 对象都由 way 和 track_id 定义。)在另一个名为 singular_array 的数组中,我想收集所有那些不重复的 Race 对象。
例如,假设我有四个具有以下属性值的 Race 对象:
种族 1:
- 方式= 1
- race_period_id = 20304
- track_id = 94949
比赛 2:
- 方式 = 2
- race_period_id = 20888
- track_id = 94949
第三场比赛
- 方式 = 1
- race_period_id = 20899
- track_id = 94949
第四场比赛
- 方式 = 1
- race_period_id = 20888
- track_id = 885858
所以这里我有两个“复数”对象:种族 1 和种族 3。还有两个“奇异”对象:race2 和 race4。
如果我有一个名为 get_plural_and_singular_arrays(races_array) 的方法,我将使用什么算法返回一个 plural_array(仅包含对象 race 1 和 race3)和一个 singular_array(仅包含对象 race2 和 race4)?
def get_plural_and_singular_arrays(races_array)
# algorithm here
return plural_array, singular_array
end
最佳答案
您可以从使用 group_by
开始,然后将其结果组织成单打和 double :
list.group_by do |i|
[ i.way, i.track_id ]
end.values.group_by do |list|
list.length > 1
end
对于多个条目和单个条目,您应该有一个包含键 true
和 false
的散列。
关于Ruby 数组 - 返回重复和非重复对象的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884888/