in reply to Re: searching through data
in thread searching through data

Instead of
my @array = map {int rand 1e6} 1..400000; ... $lookup_table{$_}++ for @array;
one should use something like
my %lookup_table = map {int rand 1e6 => 1} 1..400000;
in order to save memory requirements. There is no need to have the list of numbers both in an array and in the hash.

Replies are listed 'Best First'.
Re^3: searching through data
by almut (Canon) on Apr 17, 2009 at 09:28 UTC
    There is no need to have the list of numbers both in an array and in the hash.

    Well, I just left in the @array to make it easier for the OP to see what is what...  And if the idea is to reduce memory usage, you should definitely also get rid of the map, which would cut it down to 45 MB, as opposed to 108 MB with the map. (map creates all the elements on the stack before assigning them...)

    my %lookup_table; $lookup_table{int rand 1e6}++ for 1..400000; # 45 M --- my %lookup_table = map {int rand 1e6 => 1} 1..400000; # 108 M

    Also, using ++ instead of assigning 1 has the added benefit of detecting duplicate numbers, should this ever be of interest...