ハッシュテーブル
リファレンスマニュアルへのリンク
ハッシュを定義する
(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 ())
ハッシュを値で降順、値が等しい場合キーで昇順にソートする
ハッシュの要素をランダムに抽出する
複数のハッシュをマージする
最終更新:2021年04月15日 00:05