[dancer-users] Template Toolkit Sort Hash

Kadir Beyazlı kadirbeyazli at gmail.com
Sun Sep 27 14:05:02 BST 2015


Hi Dave,

On Sun, Sep 27, 2015 at 3:38 PM, Dave Cross <dave at dave.org.uk> wrote:
>
>
> On 27/09/15 12:48, Kadir Beyazlı wrote:
>>
>> On Sat, Sep 26, 2015 at 10:49 PM, Dave Cross <dave at dave.org.uk> wrote:
>>>
>>>
>>> On 26/09/15 19:25, Kadir Beyazlı wrote:
>>>>
>>>>
>>>> Hi Dave,
>>>>
>>>> On Sat, Sep 26, 2015 at 12:11 PM, Dave Cross <dave at dave.org.uk
>>>> <mailto:dave at dave.org.uk>> wrote:
>>>>   >
>>>>   >
>>>>   > On 25/09/15 19:40, Richard Reina wrote:
>>>>   >>
>>>>   >> I display a hash reference in a  template.  It works well but is
>>>> there a
>>>>   >> way I can sort it by SNAME instead of ID?
>>>>   >>
>>>>   >>      <ul class="list-group fancy-list-items">    <!-- <ul
>>>>   >> class="list-group checked-list-box"> -->
>>>>   >>               <table style="width:100%">
>>>>   >>                  <% FOREACH ID IN Pats.keys.sort %>
>>>>   >>                  <tr class="list-group-item">
>>>>   >>                    <td width="70"><% Pats.$ID.SNAME %></td>
>>>>   >>                    <td width="75"><% Pats.$ID.ANAME %></td>
>>>>   >>                    <td width="35"><% Pats.$ID.SSN %></td>
>>>>   >>                    <td width="35"><% Pats.$ID.YR %></td>
>>>>   >>                    <td width="250"><% Pats.$ID.CHNAME %></td>
>>>>   >>                    <td width="550"><% Pats.$ID.DESCRIP %></td>
>>>>   >>                    <% END %>
>>>>   >>                  </tr>
>>>>   >>              </ul>
>>>>   >>              </table>
>>>>   >
>>>>   >
>>>>   > It looks like you have a hash of hashes. Is that correct?
>>>>   >
>>>>   > Anyway, you can pass "sort" the name of the key that you want sort
>>>> on.
>>>> [KB] This is a very common problem asked previously and no solution
>>>> found. It was advised to use array ref instead of hashref at previous
>>>> mails. Now I tried your offer and see that it does not work. Values are
>>>> unordered again.
>>>
>>>
>>>
>>> Damn, yes. There were a couple of typos in my solution. I didn't have
>>> time to test it. Sorry about that.
>>>
>>> Of course, I can't be sure until I know what your data structure really
>>> looks like,
>>
>> [KB] The data Richard mentioned is a classic fetchall_hashref data as
>> below:
>>
>> $Pats = {ID => { SNAME => Value,
>>                           CHNAME => Value,
>>                           ANAME => Value,
>>                       },
>>              ID => { SNAME => Value,
>>                           CHNAME => Value,
>>                           ANAME => Value,
>>                       },
>>             ID => { SNAME => Value,
>>                           CHNAME => Value,
>>                           ANAME => Value,
>>                       }
>>              }
>>
>> ID is key of other attributtes. He asks if it id possible to sort by
>> SNAME at above structure.
>> I am using arrayref but this is common questin asked by beginners and
>> no solution found
>
>
> My second solution (shown below) works fine in this situation.
[KB] You are right. I did not realize that the data structure you
wrote at your 2nd mail is same with the data structure I wrote.
It works. I had given up using hashref at template toolkit because of
this problem and started using arrayref. But I can use now :)

> Dave...
>
>
>>> but this demonstrates a solution for the data structure that seems to
>>> make most sense.
>>>
>>>    [% Pats = {
>>>       id1 => {
>>>         ID    => 'id1',
>>>         SNAME => 'ZZZ',
>>>         ANAME => 'aname1',
>>>       },
>>>       id2 => {
>>>         ID    => 'id2',
>>>         SNAME => 'XXX',
>>>         ANAME => 'aname2',
>>>       },
>>>       id3 => {
>>>         ID    => 'id3',
>>>         SNAME => 'YYY',
>>>         ANAME => 'aname3',
>>>       }
>>>    } -%]
>>>    Original:
>>>    [% FOREACH id IN Pats.keys.sort -%]
>>>    [% id %] / [% Pats.$id.SNAME %] / [% Pats.$id.ANAME %]
>>>    [% END -%]
>>>    New:
>>>    [% FOREACH Pat IN Pats.values.sort('SNAME') -%]
>>>    [% Pat.ID %] / [% Pat.SNAME %] / [% Pat.ANAME %]
>>>    [% END -%]
>>>
>>> Cheers,
>>>
>>> Dave...
>>>
>>>
>>> _______________________________________________
>>> dancer-users mailing list
>>> dancer-users at dancer.pm
>>> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>>
>>
>>
>>
>>
>
> --
> Dave Cross :: dave at dave.org.uk
> http://dave.org.uk/
> @davorg
> _______________________________________________
> dancer-users mailing list
> dancer-users at dancer.pm
> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users



-- 
Kadir Beyazlı
Computer Engineer
GSM : +90 535 821 50 00


More information about the dancer-users mailing list