2017-10-05 1 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)) 

그럼 어떻게 시작할 수 있습니까? 라켓의 해시 테이블은 매우 어렵습니다. 내가 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