各位大大好,小弟有個排序的問題,
我有一串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的兩個值做兩次排序。