gpt4 book ai didi

arrays - 如何在给定键数组的情况下快速过滤散列?

转载 作者:行者123 更新时间:2023-12-01 06:56:06 26 4
gpt4 key购买 nike

这是一个过度设计的解决方案,我认为可以做得更好。基本上,它需要一个键数组来创建一个过滤器字符串,它会针对哈希中的每个键进行检查,以查看该键是否在过滤器字符串中具有索引...排除标志翻转逻辑以包含或排除基于_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 和索引......这些快速的方法与做正则表达式相比,还是有更好的功能可以使用?

最佳答案

我的 %filtered_hash = map { $_ => $hash{$_} } grep { 存在 $hash{$_} } @filter_keys;

关于arrays - 如何在给定键数组的情况下快速过滤散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com