我使用Ruby并尝试选择存储在数组中的元组,使用其他数组中的项作为条件。
list = [{field1:value1,field2:valueA},...,{field1:valuen,field2:valueZ}]
criteria = [sel1,sel2,sel3,sel4,...]使用field1==criteria[i] (criteria中的任何元素)创建新的元组数组(列表的子集)的最有效方法是什么?
我已经尝试过结合使用.each和.find了吗?但这需要一段时间,因为列表是一个相当大的数组。
发布于 2019-04-14 23:10:01
# 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] }发布于 2019-04-14 23:17:57
我很想试试这个..。您可能想要做一些基准测试。
subset = list.select{ |h| (criteria & h.keys).any? }发布于 2019-04-15 19:57:33
谢谢你vm。我两个都试过了,Igneus提出的解决方案似乎是最适合我的情况。在我的".each“循环中,它运行在不到1秒的i/o中,大约需要7分钟。太棒了!
https://stackoverflow.com/questions/55676485
复制相似问题