newlisp中可以利用hash functions 來實現某些特定資料出現次數的統計,如
統計完成後如何根據資料出現的次數進行排序呢? newlisp中沒有實現根據value值進行排序的封裝方法,因此也需要一些額外的操作來實現。(new tree 'myhash)
(if (myhash y)
(myhash y (+ (myhash y) 1))
(myhash y 1)
)
由上操作可以看出,newlisp中hash的儲存是以二層列表的模式進行儲存,同時預設對key進行公升序排列。下面則根據value值進行排序:(mytable "dd" 5)
(mytable "ff" 4)
(mytable "ee" 1)
(mytable "ff")
< 4
(mytable)
< ((「dd」 5)(「ee」 1)(「ff」 4))
第一種(通用型別)
第二種,由於剛開始學學習newlisp不是很熟練,採用了包含行列式變換在內的操作處理後進行排序。(define (comp x y )(>= (last x) (last y)))
(sort (mytable) comp)
< (("dd" 5 )("ff" 4)("ee" 1))
**:(set 'l (mytable))
(set 'middle-var (transpose l)) ;;進行transpose換位
(swap (middle-var 0) (middle-var 1)) ;;交換middle-var的兩個元素
(set 'sort-list (sort (transpose middle-var) >));;再次進行transpose換位,最後進行降序排列。
(mytable) -->((「dd」 5)(「ee」 1)(「ff」4))dd5ee
1ff4transpose後
ddeeff5
14swap 5
14ddee
ff再次進行transpose1ee
4ff5dd
降序排列5dd
4ff1ee
這種方法有一定的侷限性.
推廣:針對通用方法進行推廣
(define (comp x y) (>= (x n) (y n)));;n為要排序的元素,索引從0開始
(sort (mytable) comp)
Perl包含hash的list排序
要以多個keys來sort,將所有以or連線起來的比較操作,放在乙個子函式裡即可。將主要的比較操作放在前面,次要的放在後面。an array of references to anonymous hashes my employees sub seniority a salary 數字降序 or b...
利用hash進行排序輸出
給你 n 個整數,請按從大到小的順序輸出其中前 m 大的數。每組測試資料有兩行,第一行有兩個數 n,m 0 1000000 第二行包含 n 個各不相同,且都處於區間 500000,500000 的整數。對每組測試資料按從大到小的順序輸出前 m 大的數。5 3 3 35 92 213 644213 9...
perl中的hash結構
perl中陣列與雜湊的差別是 雜湊是按照名字來訪問它們的標量的,而不是像陣列那樣使用數字標號進行訪問。hash的定義用 陣列的定義用 對hash結構進行賦值 author author franker 逗號箭頭運算子,即 利用 箭頭對hash進行初始化 從hash中讀取元素 print author...