代码之家  ›  专栏  ›  技术社区  ›  Structure

如何在不使用for循环的情况下完全重置哈希?

  •  17
  • Structure  · 技术社区  · 16 年前

    我想完全重置我的 %hash 所以它根本不包含键或值。我宁愿用一个衬垫也不必用环。

    到目前为止,我已经尝试了:

    %hash = 0;
    %hash = undef;
    

    for (keys %hash) {
        delete $hash{$_};
    }
    

    这个工作,但我真的很想这样做与一个班轮。有没有办法简单地重置我忽略的哈希?

    7 回复  |  直到 16 年前
        1
  •  38
  •   rafl    16 年前

    %hash = (); undef %hash; 将起作用,不同的是后者将返回一些内存用于其他事情。前者将保留哈希表中以前使用过的内容的内存,假设稍后在重新填充哈希表时仍将再次使用。

    你可以用 Devel::Peek 要观察这种行为:

    $ perl -MDevel::Peek -we'my %foo = (0 .. 99); %foo = (); Dump \%foo; undef %foo; Dump \%foo'
    SV = IV(0x23b18e8) at 0x23b18f0
      REFCNT = 1
      FLAGS = (TEMP,ROK)
      RV = 0x23acd28
      SV = PVHV(0x23890b0) at 0x23acd28
        REFCNT = 2
        FLAGS = (PADMY,SHAREKEYS)
        ARRAY = 0x23b5d38
        KEYS = 0
        FILL = 0
        MAX = 63
        RITER = -1
        EITER = 0x0
    SV = IV(0x23b18e8) at 0x23b18f0
      REFCNT = 1
      FLAGS = (TEMP,ROK)
      RV = 0x23acd28
      SV = PVHV(0x23890b0) at 0x23acd28
        REFCNT = 2
        FLAGS = (PADMY,SHAREKEYS)
        ARRAY = 0x0
        KEYS = 0
        FILL = 0
        MAX = 7
        RITER = -1
        EITER = 0x0
    

    MAX 中的字段 PVHV 这些是重要的一点。

        2
  •  7
  •   Thilo    16 年前

    怎么样

    %hash = ();
    
        3
  •  5
  •   Eugene Yarmash    16 年前

    你可以用 undef :

    undef %hash;
    
        4
  •  2
  •   codaddict    16 年前

    你可以做:

    %hash = ();
    
        5
  •  2
  •   Thariama    16 年前

    使用

    %hash = ();
    
        6
  •  1
  •   Pramodh    16 年前

    %哈希=();必须工作

        7
  •  0
  •   kkoolpatz    13 年前

    delete $hash{$_} for (keys %hash)