2017-10-05 96 views
0

我是新來的球拍,我試圖定義一個函數sort-mail,它將對哈希表進行排序。在球拍中對哈希表進行排序

我一些定義的列表:

(define test-dates 
    '("Sun, 10 Sep 2017 09:48:44 +0200" 
     "Wed, 13 Sep 2017 17:51:05 +0000" 
     "Sun, 10 Sep 2017 13:16:19 +0200" 
     "Tue, 17 Nov 2009 18:21:38 -0500" 
     "Wed, 13 Sep 2017 10:40:47 -0700" 
     "Thu, 14 Sep 2017 12:03:35 -0700" 
     "Wed, 18 Nov 2009 02:22:12 -0800" 
     "Sat, 09 Sep 2017 13:40:18 -0700" 
     "Tue, 26 Oct 2010 15:11:06 +0200" 
     "Tue, 17 Nov 2009 18:04:31 -0800" 
     "Mon, 17 Oct 2011 04:15:12 +0000" 
     "Sun, 16 Oct 2011 23:12:02 -0500" 
     "Mon, 11 Sep 2017 14:41:12 +0100")) 

    (define sorted-dates 
    '("Tue, 17 Nov 2009 18:04:31 -0800" 
     "Tue, 17 Nov 2009 18:21:38 -0500" 
     "Wed, 18 Nov 2009 02:22:12 -0800" 
     "Tue, 26 Oct 2010 15:11:06 +0200" 
     "Sun, 16 Oct 2011 23:12:02 -0500" 
     "Mon, 17 Oct 2011 04:15:12 +0000" 
     "Sat, 09 Sep 2017 13:40:18 -0700" 
     "Sun, 10 Sep 2017 09:48:44 +0200" 
     "Sun, 10 Sep 2017 13:16:19 +0200" 
     "Mon, 11 Sep 2017 14:41:12 +0100" 
     "Wed, 13 Sep 2017 10:40:47 -0700" 
     "Wed, 13 Sep 2017 17:51:05 +0000" 
     "Thu, 14 Sep 2017 12:03:35 -0700")) 

功能應該通過這個測試。

(module+ test  
    (define test-hashes (map (lambda (x) (hasheq 'Date x)) test-dates))  
    (define sorted-hashes (map (lambda (x) (hasheq 'Date x)) sorted-dates))  
    (check-equal? (sort-mail test-hashes) sorted-hashes)) 

那麼,我該怎麼開始呢?我在Racket中發現哈希表非常困難。我想過使用sort函數,但它猜測它不會將散列表作爲參數。

+1

「排序哈希表」是什麼意思?不可變的哈希表根據其元素的哈希存儲,有點內在地存儲。這就是他們的工作方式。我不明白你在問什麼。 –

回答

0

哈希表本質上是排序的。按照設計,它們通過將唯一鍵映射到索引來允許即時查找時間。因此,沒有必要使用排序機制來處理哈希映射。如果您嘗試將鍵值對聚合到列表中,然後進行排序,那肯定是可行的。

散列鍵將返回表中的鍵列表。 散列值將返回表中的值列表。

這些列表可以排序。您也可以將每個列表中的每個元素配對在一起(如此鍵列值對的列表)。請嘗試以下操作:

(define h (make-immutable-hash 
    (list (cons 1 2) 
     (cons 3 4) 
     (cons 5 6) 
     (cons 7 8)))) 


(define (pair-up key value) 
    (list key value)) 

(map pair-up (hash-keys h) (hash-values h)) 

; Alternative to above, where pair-up is essentially defined inside. 
(map (lambda (key value) (list key value)) (hash-keys h) (hash-values h)) 
+0

請使用一些相關的標籤。它可以幫助正在搜索一些標籤的其他用戶簡單地找到您的問題。 – Pouriya