[問題] hash的值split成array再做排序

看板Perl作者 (修洛特)時間8年前 (2016/12/03 16:38), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
各位大大好,小弟有個排序的問題, 我有一串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的兩個值做兩次排序。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.36.103 ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1480754334.A.9AF.html

12/03 18:03, , 1F
https://pastebin.com/E4sbJEMx 是不是這個效果?
12/03 18:03, 1F

12/03 18:26, , 2F
感謝一樓大大,是這個效果沒錯!
12/03 18:26, 2F
文章代碼(AID): #1OGeIUcl (Perl)
文章代碼(AID): #1OGeIUcl (Perl)