我有一些perl腳本來逐行處理文件(包含大量數字)。Perl在數字上排序
文件內容(樣本數據,前3個數字被空間分隔,則單獨的是第三和第四數字之間標籤):
1 2 3 15
2 9 8 30
100 106 321 92
9 8 2 59
300 302 69 88
....
腳本內容:
# snippet of script
open(INF, "$infile") || die "Unable to open file $infile: $!\n";
@content = <INF>;
close(INF);
foreach $line (@content) {
# blah blah, script to handle math here
# Now the numbers are stored in separate variables
# $n1 stores the 1st number, i.e.: 1
# $n2 stores the 2nd number, i.e.: 2
# $n3 stores the 3rd number, i.e.: 3
# $n4 stores the 4th number, i.e.: 15
# Solution code to be inserted here
}
我想到:
- 對變量$ n1,$ n2,$ n3進行排序並以升序輸出。
- 在的foreach結束,擺脫重複的
我的方法:
# Insert below code to foreach
$numbers{$n1} = 1;
$numbers{$n2} = 1;
$numbers{$n3} = 1;
@keys = sort { $numbers{$b} <=> $numbers{$a} } keys %numbers;
#push @numbers, "$keys[0] $keys[1] $keys[2]";
$numbers2{"$keys[0] $keys[1] $keys[2]"} = 1;
這定義了兩個散列:第一散是排序,第二散對於排序後去除重複。
有沒有更好的方法? 謝謝,
所以你不想保留第四個號碼?在擺脫重複之後,你在做什麼?特別是,你是否需要按照某種順序來查看結果? – ysth
http://perlmaven.com/unique-values-in-an-array-in-perl – redbmk
我理解這個權利 - 你想排序和刪除每行數字的重複,是嗎? (所以有些行最終會有更少的數字。) – zdim