ok here ya go try this out....
Code:
;Usage hdel.wilddata -bN <name> <matchtext>
;
; Deletes hashtable Items who's data matches the matchtext given.
;
; -bN : N being a number 1 or greater (default 10),
;       N represents the point where a simple loop is no longer used to remove matched data items
;       ie: if N is 5 and there are only 3 data matched items then a simple loop is used
;           if N is 10 and there are 15 data matched items then the hsave/filter method is used.
;
alias hdel.wilddata {
  ;
  ; Pharse command line phase
  ;
  var %breakpoint = 10
  if (-* !iswm $1) {
    var %hdel.wilddata.hashtable = $1
    var %hdel.wilddata.matchtext = $2-
  }
  else {
    if ($calc($mid($1,$calc($poscs($1,b) + 1))) isnum 1-) { var %breakpoint = $v1 }
    var %hdel.wilddata.hashtable = $2
    var %hdel.wilddata.matchtext = $3-
  }
  ;
  ; Do the hdel phase
  ;
  if (((%hdel.wilddata.hashtable != $null) && (%hdel.wilddata.matchtext != $null)) && ($hfind(%hdel.wilddata.hashtable,%hdel.wilddata.matchtext,0,w).data)) {
    if ($v1 > 0) {
      if ($v1 == $hget(%hdel.wilddata.hashtable,0).item) {
        ;
        ; Matchtext matched entire table 
        ;
        hdel -w %hdel.wilddata.hashtable *
      }
      elseif ($v1 < %breakpoint) {
        ;
        ; Simple loop method
        ;
        while ($hfind(%hdel.wilddata.hashtable,%hdel.wilddata.matchtext,1,w).data) { hdel %hdel.wilddata.hashtable $v1 }
      }
      else {
        ;
        ; Hsave/filter method
        ;
        set %hdel.wilddata.hashtable %hdel.wilddata.hashtable
        hsave -ou %hdel.wilddata.hashtable hdel.wilddata.tempfile.txt
        window -hn @hdel.wilddata.hidden.window
        loadbuf -r @hdel.wilddata.hidden.window hdel.wilddata.tempfile.txt
        hsave -oun %hdel.wilddata.hashtable hdel.wilddata.tempfile.txt
        filter -fkn hdel.wilddata.tempfile.txt hdel.wilddata.filter.alias %hdel.wilddata.matchtext
        window -c @hdel.wilddata.hidden.window
        unset %hdel.wilddata.hashtable
      }
    }
  }
}
alias -l hdel.wilddata.filter.alias { hdel %hdel.wilddata.hashtable $line(@hdel.wilddata.hidden.window,$calc(-1 + 2 * $1)) }


it uses 3 possable methods
(1) if it notices you wildcarded the whole hashtabe, it just erases the whole table
(2) It uses a simple loop if there isnt many to do, default below 10 to do, or -bN and u can set that number.
(3) other wise it uses a Hsave & Filter combo

If anyone is interested but cant follow it i can explain.