hotti: Keys in Hash löschen

Hi,

s. Thema, die Keys im hash sind alle numerisch. Gibts da eine Möglichkeit, mit einem Rutsch alle Keys zu löschen, die kleiner als eine von mir bestimmte Zahl sind? Also ohne eine Schleife zu legen. So etwa:

delete $hash{< 333} ???

Hotte

--
Vorsicht, Löschpapier brennt!!!
  1. Moin Moin!

    s. Thema, die Keys im hash sind alle numerisch.

    Warum nimmst Du kein Array?

    Gibts da eine Möglichkeit, mit einem Rutsch alle Keys zu löschen, die kleiner als eine von mir bestimmte Zahl sind? Also ohne eine Schleife zu legen. So etwa:

    delete $hash{< 333} ???

    Nö, Du kannst auf eine explizite Schleife verzichten, aber implizit läuft immer eine Schleife.

    Du könntest Dir mit dem Flipflop-Operator und einem Hash-Slice behelfen, sofern Du den kleinstmöglichen Key kennst und die Keys ganze Zahlen sind:

    perl -e '$x{$_}=$_ for 1..10; delete @x{1..5}; print join "," => keys %x'
    6,7,9,8,10

    Ansonsten bleibt Dir eigentlich nur noch grep:

    perl -e '$x{$_}=$_ for 1..10; delete @x{grep { $_ < 6 } keys %x}; print join "," => keys %x'
    6,7,9,8,10

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Moin Moin!

      Ansonsten bleibt Dir eigentlich nur noch grep:

      perl -e '$x{$_}=$_ for 1..10; delete @x{grep { $_ < 6 } keys %x}; print join "," => keys %x'

      Juhu, das geht, danke Dir Alexander!

      Viele Grüße,
      Hotti

      --
      Mist, zu früh um ins Bett zu gehen, zu spät um noch was Neues anzufangen.