perl從sort到施瓦茨變換

2021-07-25 02:49:01 字數 2688 閱讀 7184

這篇博文記錄perl的排序演算法,從sort的簡單排序到簡潔漂亮的施瓦茨變換.

語法sort list

## sort 預設情況對文字字元按照字元順序排序

## 對字串排序

my@namelist = qw/bob marry jack simon ann tiger/;

print

"sort namelist:", sort

"@namelist";

## sortednamelist: ann bob jack marry simon tiger

## 對字串排序

my@sortednumber = sort

qw/11

332121

5443

3222/;

print

"sortednumber: @sortednumber\n";

## sortednumber: 1 11 2 21 222 3 33 43 54

語法sort block list

## 在block**塊中使用`<=>`(飛船操作符)返回乙個編碼值來指明排序的順序

my@sortednumber = sort qw/11

332121

5443

3222/;

print

"sortednumber: @sortednumber\n";

## 輸出 sortednumber: 1 2 3 11 21 33 43 54 222

## 如果要降序排序 修改**塊為

## 也可以 reverse @sortednumber實現降序

某公司有六個職員,老闆需要這六個職員按工資排名的清單,下面用乙份**表示這個計算過程.

my

@namelist = qw/bob marry jack simon ann tiger/;

my@namelistbysalary = sort @namelist;

## asksalary()是返回salary的子例程

思考: 當要比較bob和marry的工資時,通過asksalary("bob")獲取bob的工資,asksalary("marry")獲取marry的工資,然後比較;當要比較bob和jack的工資時,sort**塊又要執行一次asksalary("bob"),以此類推無疑是對資源的一種浪費,尤其是員工越來越多的時候.

使用乙個中間陣列儲存每個人的工資,這樣不必每次都去asksalary().

my

@namelist = qw/bob marry jack simon ann tiger/;

my@array_salary = map @namelist;

my@array_salary_sorted = sort @array_salary;

my@namelistbysalary = map @array_salary_sorted;

那麼將上一節中的**組合到一起就是施瓦茨變換, 施瓦茨變換從右往左看.

my

@namelist = qw/bob marry jack simon ann tiger/;

## 施瓦茨變換

my@namelistbysalary = map ##第三步 從排序後的list中取出name組成最後的list

sort ##第二步 sort對list排序,排序依據salary

map [$_, asksalary($_)], @namelist ; ##第一步 map返回乙個list,list中的元素是陣列引用[ name,salary ]

print

"swc: @namelistbysalary\n";

##  施瓦茨變換

my@namelistbysalary = map

( ## 此小括號為增加可讀性

sort ( map [$_, asksalary($_), askage($_)], @namelist )

);print

"swc: @namelistbysalary\n";

工資也一樣/年齡也一樣/身高…/性別…

當排序的條件越來越多,匿名陣列就不方便了,把陣列改為hash更好用

##  施瓦茨變換多級排序

my@namelistbysalary = map }

( ## 此小括號為增加可讀性

sort <=> $b-> or

$b-> <=> $a-> or

$b=>

<=> $b->

} ( ## 此小括號為增加可讀性

map +, @namelist));

print

"swc: @namelistbysalary\n";

用Perl從oracle匯出百萬級資料到excel

perl從oracle匯出百萬級資料到excel excel 2007 可以存放1048576行 16384列的資料 excel 2003大概是65535行 我從oracle中匯出30萬行60列的資料到excel中花了約8分鐘。如果你還沒有安裝perl,按下面步驟 步驟 2 輸入ppm命令開啟per...

perl學習從0起

2.看perl的一些基本語法 首先看到的是一些基本變數,perl也和其他語言一樣,包括 整型 浮點數 字串 再次是perl的操作符,也和其他語言一樣,包括 1 算術操作符,如 負數 2 整數比較操作符,如 比較符,會返回3個值,0兩個值相等,1第乙個值大,1第二個值大 3 字串比較符 這個和php有...

如何從CPAN安裝Perl模組

perl有乙個從外部匯入perl模組的機制,從外部匯入到perl的模組可以應用到perl指令碼中。cpan是乙個由全世界perl開發者貢獻出來的乙個功能特別強大的公共perl模組倉庫。因為perl本身自帶的核心perl模組數量比較少,因此你學要從cpan來安裝額外的perl模組。你可以從cpan上找...