我的第一個問題......我通過搜索找到了許多其他問題的答案,但這次我沒有這樣做:-)
我想生成一個報告,該報告按嵌入在我輸入資料的字串中的數字排序。該報告是從 perl 散列的元素生成的,其中使用相同的數字作為散列鍵。
我目前得到的輸出像字串一樣排序。
foreach my $num (sort keys %dir_map) {
$path = $paths{$num};
$name = $names{$num};
printf OUT ("%d %s %s\n",$num,$path,$name);
}
我的輸入資料如下所示:
dist_14 randomString nameStringIwant RandomInteger AnotherRandomString
我正在處理:
while(<IN>) {
chomp;
my @header = split /\s /;
my $header_length = $#header ;
if ( /dist_/ ) {
my $NumberStr = $header[0] ;
$justNumberStr =~ s/dist_//;
my $justNumber = sprintf("%d",$justNumberStr);
$names{$justNumber} = $header[2];
}
}
uj5u.com熱心網友回復:
正如您所發現的,默認情況下,Perl 的排序將使用字串比較進行排序。要覆寫該默認行為,您需要提供一個排序塊。
foreach my $num (sort { $a <=> $b } keys %dir_map)
排序塊在變數$a和 中從您的串列中獲得兩個元素$b。您的代碼應該比較這兩個值,如果回傳負整數$a到來之前$b,如果,一個正整數$b到來之前$a,零,如果他們排序在同一個地方。“飛船操作員” ( <=>) 對兩個數字完全相同。
常見問題解答如何按(任何)對陣列進行排序? 也可能有用。您沒有陣列,但可以以相同的方式處理您的鍵串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/329320.html
上一篇:套接字IO客戶端 ReactTypescript ContextAPI導致TypeError:無法分配給物件“#<Object>”的只讀屬性“exports”
