You could use grep to determine if the element already exists in the array. However it may be easier to use a hash. If the items you are working with are simple scalars (aka not references) assigning them as keys in a hash will assure you end up with a unique list. If you do not want to go that way, I have a few standard subroutines I use to find unique elements from a list. One (which is faster) will only work for simple string values, the second will work even when the list contains references. Here they are:
#_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ +-_-_-_-_ # Function: uniqStrings() # Author: Dave Mueller # Returns: @uniq # Parameters: @array # Description: Returns a unique list of all Strings found in @array # Note: references wil be broken . . . #_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ +-_-_-_-_ sub uniqStrings { my %temp = (); @temp{@_} = (); return keys %temp; } #_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ +-_-_-_-_ # Function: uniqValues() # Author: Dave Mueller # Returns: @uniq # Parameters: @array # Description: Returns a unique list of all values found in @array #_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ +-_-_-_-_ sub uniqValues { my %temp = (); @temp{@_} = (0 .. $#_); return map({$_[$_]} values %temp); }
In reply to Re: unique elements in an array
by JediWizard
in thread unique elements in an array
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |