newLisp中的Hash排序

2021-09-30 11:35:16 字數 1332 閱讀 2688

newlisp中可以利用hash functions 來實現某些特定資料出現次數的統計,如

(new tree 'myhash) 

(if (myhash y)

(myhash y (+ (myhash y) 1))

(myhash y 1)

)

統計完成後如何根據資料出現的次數進行排序呢? newlisp中沒有實現根據value值進行排序的封裝方法,因此也需要一些額外的操作來實現。

(mytable "dd" 5) 

(mytable "ff" 4)

(mytable "ee" 1)

(mytable "ff")

< 4

(mytable)

< ((「dd」 5)(「ee」 1)(「ff」 4))

由上操作可以看出,newlisp中hash的儲存是以二層列表的模式進行儲存,同時預設對key進行公升序排列。下面則根據value值進行排序:

第一種(通用型別)

(define (comp x y )(>= (last x) (last y)))

(sort (mytable) comp)

< (("dd" 5 )("ff" 4)("ee" 1))

第二種,由於剛開始學學習newlisp不是很熟練,採用了包含行列式變換在內的操作處理後進行排序。

(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...