perl – 比较和验证数据结构
发布时间:2020-12-16 06:29:05 所属栏目:大数据 来源:网络整理
导读:我必须像这样检查hashrefs { foo = 65,bar = 20,baz = 15 } 对表达这样的条件的hashrefs的arrayref [ { foo = { "=" = 75 } },{ bar = { "==" = 20 } },{ baz = { "=" = 5 } },] 如果满足所有条件,则返回真值. 两个数据结构都没有预先确定.一个是通过解析数
我必须像这样检查hashrefs
{ foo => 65,bar => 20,baz => 15 } 对表达这样的条件的hashrefs的arrayref [ { foo => { "<=" => 75 } },{ bar => { "==" => 20 } },{ baz => { ">=" => 5 } },] 如果满足所有条件,则返回真值. 两个数据结构都没有预先确定.一个是通过解析数据库中的字符串而构建的,另一个是通过解析用户输入来构建的. 在上面的例子中,我会返回true,但如果我检查hashref [ { foo => { "<=" => 60 } },] 我会返回false,因为第一个hashref中的foo不是< = 60. 问题是:这样做的最佳策略是什么? 我在想 我完全走错了路吗?如果没有,最好的,评估或预建的功能是什么? 我已经研究过Params :: Validate,但是我担心它会产生大量开销,而且无论如何我都必须构建回调. 解决方法
请改用代码引用,您就可以使用验证器.我简化了你的条件结构.除非你有重复的散列键,否则不需要在那里有额外的数组级别,我认为你没有.
简化的子{$_ [0]< = 75}将简单地比较参数的第一个值.默认情况下,子例程中计算的最后一个值将是其返回值. use v5.10; use strict; use warnings; my $in = { foo => 65,bar => 21,baz => 15 }; my $ref = { foo => sub { $_[0] <= 75 },bar => sub { $_[0] == 20 },baz => sub { $_[0] >= 5 },}; for my $key (keys %$in) { if ($ref->{$key}($in->{$key})) { say "$key : Valid"; } else { say "$key : Invalid"; } } 输出: bar : Invalid baz : Valid foo : Valid (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |