Ruby-Hash。使用变量选择
尝试在选择枚举器中传递变量规则Ruby-Hash。使用变量选择,ruby,Ruby,尝试在选择枚举器中传递变量规则 match = companies.select{ |x| x[rule] > 10 } data.each do |item| item.each do |file_name,filter_settings| if file_name == "out1_1x.csv" output_file = file_name current_filter = filter_settings rule =
match = companies.select{ |x| x[rule] > 10 }
data.each do |item|
item.each do |file_name,filter_settings|
if file_name == "out1_1x.csv"
output_file = file_name
current_filter = filter_settings
rule = filter_settings[:rule].to_sym
condition = filter_settings[:condition]
amount = filter_settings[:amount]
p rule # here i have :price
match = companies.select{ |x| x[rule] > 10 }
puts match
end
end
end
但是得到一个错误:
未定义的方法'>'
对于nil类,即使在规则中指定了值
companies.select{ |x| x[:price] > 10 }
这个任务还可以
公司被定义为具有以下结构的哈希数组:
{:name=>"ABC company", :code=>"RDCX", :price=>33,:volume=>79560}
{:name=>"DEF", :code=>"FFF", :price=>41, :volume=>367491}
我还想问一下,如何将“外部变量-规则、条件、数量”中的“完整参数集”传递给select枚举器
差不多
match = companies.select{ |x| x[rule] condition amount }
Where condition is - ">", "<" "=" ?
match=companys.选择{| x | x[规则]条件金额}
如果条件为-“>”,“请查看he方法:
不过要小心,因为send可以调用所有方法。如果要排除私有方法,可能需要使用#public_send(请参阅链接)。或者如果只允许某些运算符,则可能需要创建一个要调用的操作白名单。
companies =[{:name=>"ABC company", :code=>"RDCX", :price=>33,:volume=>79560},
{:name=>"DEF", :code=>"FFF", :price=>41, :volume=>367491}]
rule = :price
condition = :>
amount = 35
p companies.select{|h| h[rule].send(condition, amount)}
# => [{:name=>"DEF", :code=>"FFF", :price=>41, :volume=>367491}]