Re: Hash Sorting Problem



Dear List

I need to delete each element after every execution of the foreach loop and
I need to update & sorted the @arr1 after every execution of the foreach
loop. I have tried a lot but not able to do this ............Pls
help...........

Thanks & Regards
Anirban Adhikary

On Mon, Feb 25, 2008 at 1:51 PM, John W. Krahn <krahnj@xxxxxxxxx> wrote:

Anirban Adhikary wrote:
Dear List

Hello,

I have written the following code .............

use Data::Dumper;


%file = (14 => "GGG",
11 => "AAA",
101 => "EEE",
1 => "TTT");


print Dumper \%file;



@arr1 = sort { $file{$b} cmp $file{$a} } keys %file; #the oldest entry
lies
at the top position

print Dumper \@arr1;

foreach $el(@arr1)
{

delete $file{$el};
print "The $el is removed from the sorted list"."\n";
@arr1 = sort { $file{$b} cmp $file{$a} } keys %file; #the oldest entry
lies

perldoc perlsyn
[ SNIP ]
If any part of LIST is an array, "foreach" will get very confused if
you add or remove elements within the loop body, for example with
"splice". So don't do that.


at the top position
print "After sorting the array elements are"."\n";
print Dumper \@arr1;
}


---------------output ------------

$VAR1 = {
'1' => 'TTT',
'11' => 'AAA',
'101' => 'EEE',
'14' => 'GGG'
};
$VAR1 = [
'1',
'14',
'101',
'11'
];
The 1 is removed from the sorted list
After sorting the array elements are
$VAR1 = [
'14',
'101',
'11'
];
The 101 is removed from the sorted list
After sorting the array elements are
$VAR1 = [
'14',
'11'
];

In the last output I think the list is not sorted properly. How can I
solve
this problem.

It is sorted properly, it's just that you are modifying the array @arr1
inside a foreach loop that iterates over that same array and you
shouldn't do that.



John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall


--
To unsubscribe, e-mail: beginners-unsubscribe@xxxxxxxx
For additional commands, e-mail: beginners-help@xxxxxxxx
http://learn.perl.org/





Relevant Pages

  • Re: [PHP] foreach() using current() strange beahvior
    ... that's expected as foreach moves the internal array pointer, ... When using the internal pointer just by calling current(so not moving ... Unless the array is referenced, foreach operates on a copy of the ...
    (php.general)
  • Re: a question about for and foreach
    ... foreach (@array) { ... why @array are changed after this foreach loop!!! ... The "foreach" loop iterates over a normal list value and sets the ... If any element of LIST is an lvalue, you can modify it by modifying ...
    (perl.beginners)
  • Re: safe to delete elements of array in foreach
    ... I agree with Jon on this one. ... I make it a habit not to delete entries in a foreach() loop. ... build an array of keys I want to delete, and after the loop ends, delete ... I don't know whether an operation like this is guaranteed to work in PHP ...
    (comp.lang.php)
  • Re: [PHP] Foreach
    ... The problem I am having is getting both to update the table in MySQL. ... echo "$t"; ... foreach { ... // foreach expects an array, ...
    (php.general)
  • Re: safe to delete elements of array in foreach
    ... (normally this is not the case but not sure in php) ... I make it a habit not to delete entries in a foreach() loop. ... build an array of keys I want to delete, and after the loop ends, ...
    (comp.lang.php)