2017-11-10 5 views
1

私は値として一連のリストを含む不変ハッシュテーブルを持っています。私は新しいハッシュを返し、リストの1に項目を追加することができるように手順を書いた:これは正常に動作するようですハッシュテーブルに格納されたリストを更新する

(define (update hash key item) 
    (hash-set hash 
      key 
      (cons item 
        (hash-ref hash key))))) 

が、ぎこちないと冗長に感じています。これを実現する組み込みプロシージャ、または同じことを達成するためのもっと慣れた方法がありますか?

答えて

2

これはそれを得ることができるように簡単です:

(define (update hash key item) 
    (hash-update hash key (curry cons item) '())) 

は説明:

  • hash-updateは、指定されたキーの更新値で新しいハッシュを返します - またはあなたがhash-update!を使用することができますその場でハッシュを変更します。
  • hashおよびkeyは自明である。
  • 第3パラメータは、アップデータプロシージャであり、古い値をパラメータとして受け取ります。この場合は、新しい値が(古い値がリストであったため)新しいプロシージャです。これは、指定されたキーの新しい値として設定されます。
  • 最後のパラメータは、の前に updaterプロシージャを呼び出す前に、キーが見つからない場合に返されるデフォルト値です。
+0

ありがとう、これははるかに簡潔です。これにより、2番目のプロシージャといくつかの条件付きロジックを削除することもできました。基本的に、キーが存在しない場合は、ハッシュを更新するために何か書きました。あなたのバージョンは両方のケースを処理します。 – djfdev

+0

素晴らしい!私はこれが便利だったのでうれしいよ:) –

関連する問題