Ruby-使用另一个包含单个字段的数组中的项目,从元组数组中选择项目

时间:2019-04-14 14:41:18

标签: ruby

我正在使用Ruby,并尝试使用另一个数组中的元素作为标准来选择存储在数组中的元组。

list = [{field1:value1,field2:valueA},...,{field1:valuen,field2:valueZ}]

criteria = [sel1,sel2,sel3,sel4,...]

使用field1==criteria[i](条件中的任何元素)创建新的元组数组(列表的子集)的最有效方法是什么?

我已经尝试过将.each.find结合使用?但是需要一段时间,因为列表是一个很大的数组。

3 个答案:

答案 0 :(得分:0)

# Set is more efficient than Array for this use-case
require 'set'
criteria = Set.new [sel1,sel2,sel3,sel4,...]

list = [{field1:value1,field2:valueA},...,{field1:valuen,field2:valueZ}]
result = list.select {|i| criteria.include? i[:field1] }

答案 1 :(得分:0)

我很想尝试一下……您可能想做一些基准测试。

subset = list.select{ |h| (criteria & h.keys).any? }

答案 2 :(得分:0)

谢谢vm。 我都尝试过,而Igneus提出的解决方案似乎是最适合我的情况。 通过我的“ .each”循环,它在不到1秒的I / O中运行了大约7分钟。 很棒!!!