2017-10-05 7 views
0

私はRacketを初めて使い、ハッシュテーブルをソートする機能sort-mailを定義しようとしています。Racketでハッシュテーブルをソートする

私はいくつかの定義されたリストをしました:

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

どのようにすれば開始できますか?私はラケットのハッシュテーブルは非常に難しいと思う。私は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

関連する問題