【问题标题】:Perl: Is it possible to subset a hash passing a value threshold?Perl:是否可以对通过值阈值的哈希进行子集化?
【发布时间】:2015-11-21 06:55:59
【问题描述】:

假设我有一个散列形式:

%hash = ( a => 1, b => 2, c => 3 , d => 4 , e => 5 , f => 6 );

我能否通过阈值 3 获得此类哈希的子集,获得以下 %subhash

%subhash = ( c => 3 , d => 4 , e => 5 , f => 6 );

并且不必进入循环?谢谢

【问题讨论】:

  • 不要有任何幻想——如果你在迭代一个数据结构,你就有了一个循环。没有解决办法。你不能不循环就循环。您可以将您正在这样做的事实隐藏在 map 或 grep 后面 - 但您无法改变这样做的需要。

标签: perl hash subset threshold


【解决方案1】:

应该这样做,尽管map 意味着一个循环:

my %subhash = map {
                     $hash{$_} >= 3
                     ? ($_, $hash{$_})
                     : ()
                  } keys %hash;

【讨论】:

    【解决方案2】:

    5.20+

    %subhash = %hash{ grep $hash{$_} >= 3, keys %hash }
    

    (虽然 grep(和 map)仍然是一个循环)

    【讨论】:

    • 不仅仅是grep。里面有四个循环!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2018-05-10
    • 2014-06-17
    • 2010-10-15
    • 2010-10-20
    • 2013-06-17
    相关资源
    最近更新 更多