ハッシュテーブル

ハッシュテーブル

リファレンスマニュアルへのリンク


ハッシュを定義する

(make-hash-table &rest KEYWORD-ARGS)

(setq h (make-hash-table :test #'equal)) ;=> #<hash-table 'equal nil 0/65 0xa469420>
; 要素を追加する
(puthash "apple" 150 h)      ;=> 150
(puthash "banana" 200 h)     ;=> 200
(puthash "lemon" 300 h)      ;=> 300
 
(puthash "fruits" '("apple" . "banana") h)       ;=> ("apple" . "banana")
(puthash "animal" '("lion" "monkey" "fish") h)   ;=> ("lion" "monkey" "whale") 

キーに関連付けられた値を取得する

ハッシュテーブル内部のテスト関数(デフォルトはeql)で比較されます。
指定したキーが存在しない場合の返値も設定可能です。

(gethash KEY TABLE &optional DFLT)

(gethash "apple" h)             ;=> 150
(gethash "banana" h)            ;=> 200
(gethash "lemon" h)             ;=> 300
(gethash "papaia" h)            ;=> nil
(gethash "papaia" h 0)          ;=> 0
 
(gethash "fruits" h)            ;=> ("apple" . "banana")
(gethash "animal" h)            ;=> ("lion" "monkey" "whale") 

ハッシュに要素を追加する

(puthash KEY VALUE TABLE)

「ハッシュを定義する」の項目を参照

CLライブラリを使って次の様にも記述できます。

(setf (gethash KEY TABLE) VALUE) 

ハッシュ内にキーが存在するかどうか調べる


gethash関数を使って値が返ってくるかで分かります。

ただし指定したキーの要素がnilの場合があるので、正確な値を
得たい場合は別に関数を用意する必要があります。

(defun hash-exists-p (key table)
  (let ((novalue (make-symbol "<nil>")))
    (not (eq (gethash key table novalue) novalue))))
 
(hash-exists-p "apple" h)               ;=> t
(hash-exists-p "pine" h)                ;=> nil 

ハッシュの要素数を取得する

(hash-table-count TABLE)

(hash-table-count h)                    ;=> 3 

キーが存在しない場合のデフォルト値を設定する


ハッシュからエントリを削除する

(remhash KEY TABLE)

(hash-table-count h)                    ;=> 3
(remhash "apple" h)                     ;=> nil
(hash-table-count h)                    ;=> 2 

ハッシュの全エントリに対してブロックを実行する

(maphash FUNCTION TABLE)

(maphash #'(lambda (key value)
             (princ (format "key=>%S,value=>%S\n" key value)))
         h)
;-> key=>"apple",value=>150
;   key=>"banana",value=>200
;   key=>"lemon",value=>300
;=> nil 

ハッシュを配列に変換する


ハッシュを空にする

(clrhash TABLE)
(setq h (make-hash-table :test #'equal))
;=> #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data ())
(puthash "apple" 150 h)
;=> 150
h
;=> #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data ("apple" 150))
(clrhash h)
;=> #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data ())
 

ハッシュを値で降順、値が等しい場合キーで昇順にソートする


ハッシュの要素をランダムに抽出する


複数のハッシュをマージする

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2021年04月15日 00:05
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。