in reply to Sort array using a ranking system from separate hash
Assuming you have your "number of arrays" stored as an array of arrays:
#! perl -slw use strict; use Data::Dump qw[ pp ]; my @AoAs = ( [ qw[ TTVVRRRDR KFRQLLWFH RSQSPRRRR CSPHHTALR WIRTPPAYR VVRRRDRGR +HISCLTFGR RTPSPRRRR NTNMGLKFR LVSFGVWIR ] ], [ qw[ AILCWGELM TVLEYLVSF GLKFRQLLW LSFLPSDFF LLSFLPSDF LLWFHISCL +MQLFHLCLI QLFHLCLII ATVELLSFL ALRQAILCW ] ], [ qw[ TTVVRRRDR CSPHHTALR WIRTPPAYR NVNMGLKIR LVSFGVWIR HISCLTFGR +] ], [ qw[ CSPHHTALR YVNTNMGLK WIRTPPAYR TLPETTVVR HISCLTFGR NTNMGLKIR +WGMDIDPYK LVSFGVWIR ] ], ); my %freq; map ++$freq{ $_ }, @$_ for @AoAs; @$_ = sort{ $freq{ $b } <=> $freq{ $a } } @$_ for @AoAs; pp \@AoAs __END__ C:\test>1169316 [ ["CSPHHTALR", "WIRTPPAYR", "HISCLTFGR", "LVSFGVWIR", "TTVVRRRDR", "K +FRQLLWFH", "RSQSPRRRR", "VVRRRDRGR", "RTPSPRRRR", "NTNMGLKFR"], ["AILCWGELM", "TVLEYLVSF", "GLKFRQLLW", "LSFLPSDFF", "LLSFLPSDF", "L +LWFHISCL", "MQLFHLCLI", "QLFHLCLII", "ATVELLSFL", "ALRQAILCW"], ["CSPHHTALR", "WIRTPPAYR", "LVSFGVWIR", "HISCLTFGR", "TTVVRRRDR", "N +VNMGLKIR"], ["CSPHHTALR", "WIRTPPAYR", "HISCLTFGR", "LVSFGVWIR", "YVNTNMGLK", "T +LPETTVVR", "NTNMGLKIR", "WGMDIDPYK"], ]
Update: you might want to include a tie-break for those with an equal frequency to ensure consistency. Eg. Here I've used increasing aplha ordering as the tie break which makes the output more consistent:
#! perl -slw use strict; use Data::Dump qw[ pp ]; $Data::Dump::WIDTH = 200; my @AoAs = ( [ qw[ TTVVRRRDR KFRQLLWFH RSQSPRRRR CSPHHTALR WIRTPPAYR VVRRRDRGR +HISCLTFGR RTPSPRRRR NTNMGLKFR LVSFGVWIR ] ], [ qw[ AILCWGELM TVLEYLVSF GLKFRQLLW LSFLPSDFF LLSFLPSDF LLWFHISCL +MQLFHLCLI QLFHLCLII ATVELLSFL ALRQAILCW ] ], [ qw[ TTVVRRRDR CSPHHTALR WIRTPPAYR NVNMGLKIR LVSFGVWIR HISCLTFGR +] ], [ qw[ CSPHHTALR YVNTNMGLK WIRTPPAYR TLPETTVVR HISCLTFGR NTNMGLKIR +WGMDIDPYK LVSFGVWIR ] ], ); my %freq; map ++$freq{ $_ }, @$_ for @AoAs; @$_ = sort{ $freq{ $b } <=> $freq{ $a } || $a cmp $b } @$_ for @AoAs; pp \@AoAs __END__ C:\test>1169316 [ ["CSPHHTALR", "HISCLTFGR", "LVSFGVWIR", "WIRTPPAYR", "TTVVRRRDR", "K +FRQLLWFH", "NTNMGLKFR", "RSQSPRRRR", "RTPSPRRRR", "VVRRRDRGR"], ["AILCWGELM", "ALRQAILCW", "ATVELLSFL", "GLKFRQLLW", "LLSFLPSDF", "L +LWFHISCL", "LSFLPSDFF", "MQLFHLCLI", "QLFHLCLII", "TVLEYLVSF"], ["CSPHHTALR", "HISCLTFGR", "LVSFGVWIR", "WIRTPPAYR", "TTVVRRRDR", "N +VNMGLKIR"], ["CSPHHTALR", "HISCLTFGR", "LVSFGVWIR", "WIRTPPAYR", "NTNMGLKIR", "T +LPETTVVR", "WGMDIDPYK", "YVNTNMGLK"], ]
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Sort array using a ranking system from separate hash
by Sandy_Bio_Perl (Beadle) on Aug 08, 2016 at 10:41 UTC | |
by BrowserUk (Patriarch) on Aug 08, 2016 at 10:47 UTC | |
by Sandy_Bio_Perl (Beadle) on Aug 08, 2016 at 12:01 UTC | |
by LanX (Saint) on Aug 08, 2016 at 12:42 UTC | |
by GotToBTru (Prior) on Aug 08, 2016 at 20:30 UTC | |
| |
by Sandy_Bio_Perl (Beadle) on Aug 08, 2016 at 10:51 UTC | |
|
Re^2: Sort array using a ranking system from separate hash
by Sandy_Bio_Perl (Beadle) on Aug 08, 2016 at 12:15 UTC |