ハッシュテーブル


ハッシュテーブル

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


ハッシュを定義する

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

h                              ;=> #<hash-table 'equal nil 3/65 0x92a5370>
(clrhash h)                    ;=> #<hash-table 'equal nil 0/65 0x92a5370> 

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

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

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

ツールボックス

下から選んでください:

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