【问题标题】:Hash table in RacketRacket 中的哈希表
【发布时间】:2018-03-17 15:15:49
【问题描述】:

我是 Racket 的新手,我正在尝试定义一个函数 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 函数,但它猜测它不会将哈希表作为参数。

【问题讨论】:

  • “对哈希表进行排序”是什么意思?不可变哈希表按其元素的哈希值排序存储,这在某种程度上是内在的。他们就是这样工作的。我不明白你在问什么。

标签: sorting hashtable racket


【解决方案1】:

哈希表本质上是排序的。通过设计,它们通过将唯一键映射到索引来允许(理论上)即时查找时间。因此,没有排序机制来作用于哈希映射,因为没有必要。如果您尝试将键值对聚合到列表中,然后进行排序,那当然是可能的。

hash-keys 将返回表中的键列表。 hash-values 将返回表中的值列表。

这些列表可以排序。您还可以将每个列表的每个元素配对在一起,(即键值对列表)。请尝试以下操作:

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

【讨论】:

  • 请使用一些相关的标签。它可以帮助正在搜索某些标签的其他用户简单地找到您的问题。
猜你喜欢
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2023-03-27
  • 2012-09-16
  • 2016-08-04
  • 2013-03-21
相关资源
最近更新 更多