比较常量数组和对象数组

时间:2017-04-19 16:29:52

标签: ruby-on-rails ruby

我有一组具有某些属性的对象。 我还有一个常数的ID数组。

我想返回在常量数组中存在id的整个对象。

这是我到目前为止所做的,但它只返回true或false,我需要它返回所有对象的数组:

some_object_attributes.collect { |attr| (Constant::SOME_IDS.include? attr.object.object_type_id)}

如何返回在常量数组中具有ID的每个attr.object

3 个答案:

答案 0 :(得分:3)

您不想要collect(又名map),它会返回块的结果。您希望根据块的结果返回集合中的对象。为此,有select

some_object_attributes.select do |attr| 
  Constant::SOME_IDS.include? attr.object.object_type_id
end

答案 1 :(得分:3)

出于好奇,对于一个非常庞大的阵列,它可能会更快:

some_object_attributes.group_by do |attr|
  attr.object.object_type_id
end.values_at(*Constant::SOME_IDS).flatten

这是O(N),因为它不会查找每个元素的Constant::SOME_IDS数组。

答案 2 :(得分:0)

使用select代替collect

collect正在返回评估结果(truefalse)。 select将返回对象。

article可能有用。