in reply to Sorting arrays based on a single element

Never, EVER, EVER be ashamed for asking a question. Absolutley the ONLY dumb question, is the one you didn't ask! (Well. Maybe asking the same question over and over but...:)

That said, you haven't really given us enough information to understand your problem. I can make a guess at what you are trying to do, but it would be much simpler if you would show us a little real code that would clarify what you mean by @Array(id,day,number). It would allow us to give an answer directed at your problem without having to apply caveats or speculations as to your meaning.


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller

Replies are listed 'Best First'.
Re: Re: Sorting arrays based on a single element
by sdyates (Scribe) on May 09, 2003 at 19:05 UTC
    sub PushDate { $x=0; if (($Date) == $StartDate[2]) { push (@DayAway, $id,$x,$Key) } while ($x < 7) { if (($Date + $x) gt $MaxDays) { $DaysAway = $MaxDays - $Date + $x; # need to see if we are one month ahead!!! } elsif (($Date + $x) == $StartDate[2]) { push (@DayAway, $id,$x,$Key); } $x=$x+1; } }

    It appears the data may not be placed in to the array properly from what I see already. After I have pushed (@DayAway, $id,$x,$Key), I want to sort the array based on $x, it appears I cannot do this now. So, I must sort before placing in to the array unless I want to redo the way I enter the data in to the array. Perhaps I should enter it differently.... hmmmm

      Okay. The problem is, that whilst you are pushing your 3 value onto the array with a single statement, the effect is the same as if you had pushed them each individually. So after you have push two sets of 3 onto the array, you end up with an array that looks like this

      @DayAway => ( id1, x1, key1, id2, x2, key2 );

      In other words, 6 discrete values, with no effective grouping between them. So when you sort the array, you'll be comparing apples with oranges, so to speak.

      Try modifying the push statements so that you are pushing an single entity (an anonymous array) that contains the 3 values each time. E.g.

      push (@DayAway, [$id, $x, $Key] );

      Then the sort strategies offered above will work for you.

      I would suggest that you try dumping the array's contents (see Data::Dumper) before and after you make this change to see the difference it makes, and then review perldsc.

      Hope it helps.


      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller