[问题] hash的值split成array再做排序

楼主: surot (修洛特)   2016-12-03 16:38:51
各位大大好,小弟有个排序的问题,
我有一串hash,内容大概是这样:
my %hash_1 = (
'L3D0' => '3 0',
'L3D7' => '3 7',
'L13D0' => '13 0',
'L13D1' => '13 1',
'L13D7' => '13 7',
);
因为直接对value做排序的话因value是string,
会把13 0的排在3 0的前面,
所以我希望可以先把value切开成array,
然后再对hash里的数字array做两次排序,
目前写到:
while(my ($key, $val) = each(%hash_1)) {
my @val_split = split(' ' , $val);
%hash_1_split = ($key => [$val_split[0], $val_split[1]]);
};
但这样写%hash_1_split只会存在一笔资料,
请问要怎么样才能把所有的资料都存入hash中,
并对里面的array做排序呢?
ps.目前的想法是写成
%hash_1_reverse = reverse %hash_1;
foreach my $key ( sort { $hash_1_reverse{$a} cmp $hash_1_reverse{$b} } keys %hash_1_reverse ) {
my $val = $hash_1_reverse{$key};
print "$val $key\n";
}
然后把上面那段改成对value的两个值做两次排序。
作者: Neisseria (Neisseria)   2016-12-03 18:03:00
https://pastebin.com/E4sbJEMx 是不是這個效果?
楼主: surot (修洛特)   2016-12-03 18:26:00
感謝一樓大大,是這個效果沒錯!

Links booklink

Contact Us: admin [ a t ] ucptt.com