选择具有任意数量条件的数组元素

时间:2015-10-11 02:07:46

标签: arrays ruby select

我有一组Time个对象。我希望我的用户能够根据各种标准选择元素的子集。标准的数量是未知的,它可以变化。另外,如果需要,我想在将来添加其他标准。

如果ts是数组,我可以写:

ts.select{|t| (t.hour == 12 || t.hour == 16) && t.month == 3}

但我如何才能使这个通用,以便Time的每个方法都可以用于过滤?例如,UI可以生成Hash

{:hour => [12, 16], :month => [3]}

这应该用于创建结合所有条件的最终过滤器。

对于每种方法,我只能有OR条件,而且方法之间只有AND条件。例如,典型的查询将返回夏季下午的所有时间。所以{:month => [6,7,8,9],:hour => [12,13,14,15,16,17]}

1 个答案:

答案 0 :(得分:2)

{:hour => [12, 16], :month => [3]}
.inject(ts){|ts, (k, v)| ts.select{|t| v.include?(t.send(k))}}