加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – 如何在给定一组键的情况下快速过滤哈希?

发布时间: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};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读