2017-10-05 2 views
0

Ich bin neu in Racket und ich versuche, eine Funktion sort-mail zu definieren, die eine Hashtabelle sortieren wird.Sortieren einer Hashtabelle in Racket

Ich habe einige definierte Listen:

(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")) 

Die Funktion soll diesen Test bestehen.

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

Also, wie starte ich überhaupt? Ich finde Hashtabellen in Racket sehr schwierig. Ich dachte an die Verwendung der sort-Funktion, aber es wird angenommen, dass es keine Hash-Tabelle als Argument verwendet.

+1

Was bedeutet "Sortieren einer Hash-Tabelle"? Unveränderliche Hash-Tabellen werden nach den Hashes ihrer Elemente sortiert, etwas intrinsisch. So arbeiten sie. Ich verstehe nicht, was du verlangst. –

Antwort

0

Hash-Tabellen sind inhärent sortiert. Sie ermöglichen eine sofortige Suchzeit, indem sie einen eindeutigen Schlüssel einem Index zuordnen. Es gibt also keinen Sortiermechanismus, der auf eine Hash-Map einwirkt, da dies nicht notwendig ist. Wenn Sie versuchen, die Schlüsselwertpaare zu einer Liste zu aggregieren und dann zu sortieren, ist das sicher möglich.

Hash-Schlüssel geben eine Liste der Schlüssel in der Tabelle zurück. Hash-Werte werden eine Liste von Werten in der Tabelle zurückgeben.

Diese Listen können sortiert werden. Sie können auch jedes Element jeder Liste zusammenführen (also eine Liste von Schlüssel/Wert-Paaren). Versuchen Sie Folgendes:

(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

Bitte verwenden Sie einige verwandte Tags. Es hilft anderen Benutzern, die nach bestimmten Tags suchen, Ihre Frage einfach zu finden. – Pouriya