数组 – 如何在给定一组键的情况下快速过滤哈希?
发布时间:2020-12-16 06:11:45 所属栏目:大数据 来源:网络整理
导读:对于我认为可以做得更好的事情,这是一个过度设计的解决方案.基本上,它需要一组键来创建一个过滤字符串,该字符串会根据哈希中的每个键进行检查,以查看该键是否在过滤字符串中有一个索引… exclude标志将逻辑翻转为包含或排除基于_filter的结果.可能不是最好的
对于我认为可以做得更好的事情,这是一个过度设计的解决方案.基本上,它需要一组键来创建一个过滤字符串,该字符串会根据哈希中的每个键进行检查,以查看该键是否在过滤字符串中有一个索引… exclude标志将逻辑翻转为包含或排除基于_filter的结果.可能不是最好的方式.有更好的方法吗?
sub _filter{ my ($filter,$key,$joiner) = @_; $joiner = $joiner ? $joiner : '+'; my $i = index($filter,$key); if($i >= 0){ my $c; $c = substr($filter,$i-1,1); print STDERR "nc => $c [$key][$i]"; if($i==0){ return 1; } return($c eq $joiner); } return 0; } sub hashFilter{ my($hash,$filter_keys,$exclude) = @_; return 0 unless isHash($hash) && $filter_keys; $exclude = $exclude ? $exclude : 0; my $filter = isArray($filter_keys)? join('+',@$filter_keys) : $filter_keys; print STDERR "FILTER is > $filter"; my $p = {map { ( _filter($filter,$_) == $exclude ) ? ($_ => $$hash{$_}) : () } keys %$hash}; return $p; } #isArray() and isHash() just check the ref value for "ARRAY" or "HASH" respectively …使用标准perl而无需额外的模块! =] 有些想法吗? 使用map和index …这些快速方法与正则表达式相比,还是有更好的函数可供使用? 解决方法
哈希切片,有人吗? :
my %filtered_hash; @filtered_keys = grep { exists $hash{$_} } @filtered_keys; @filtered_hash{@filtered_keys} = @hash{@filtered_keys}; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |