ハッシュテーブル

「ハッシュテーブル」の編集履歴(バックアップ)一覧はこちら

ハッシュテーブル」(2021/04/15 (木) 00:05:47) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

* ハッシュテーブル ** リファレンスマニュアルへのリンク - [[Hash Tables - GNU Emacs Lisp Reference Manual>http://www.gnu.org/software/emacs/manual/html_node/elisp/Hash-Tables.html]] ** ハッシュを定義する &italic(){(make-hash-table &rest KEYWORD-ARGS)} #highlight(lisp) {{ (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)で比較されます。 指定したキーが存在しない場合の返値も設定可能です。 &italic(){(gethash KEY TABLE &optional DFLT)} #highlight(lisp) {{ (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") }} ** ハッシュに要素を追加する &italic(){(puthash KEY VALUE TABLE)} 「ハッシュを定義する」の項目を参照 CLライブラリを使って次の様にも記述できます。 #highlight(lisp) {{ (setf (gethash KEY TABLE) VALUE) }} ** ハッシュ内にキーが存在するかどうか調べる gethash関数を使って値が返ってくるかで分かります。 ただし指定したキーの要素がnilの場合があるので、正確な値を 得たい場合は別に関数を用意する必要があります。 #highlight(lisp) {{ (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 }} ** ハッシュの要素数を取得する &italic(){(hash-table-count TABLE)} #highlight(lisp) {{ (hash-table-count h) ;=> 3 }} ** キーが存在しない場合のデフォルト値を設定する ** ハッシュからエントリを削除する &italic(){(remhash KEY TABLE)} - -#highlight(lisp) {{ -(hash-table-count h) ;=> 3 -(remhash "apple" h) ;=> nil -(hash-table-count h) ;=> 2 }} - -** ハッシュの全エントリに対してブロックを実行する -&italic(){(maphash FUNCTION TABLE)} - -#highlight(lisp) {{ -(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 }} - -** ハッシュを配列に変換する - -** ハッシュを空にする -&italic(){(clrhash TABLE)} - -#highlight(lisp) {{ -h ;=> #<hash-table 'equal nil 3/65 0x92a5370> -(clrhash h) ;=> #<hash-table 'equal nil 0/65 0x92a5370> }} - -** ハッシュを値で降順、値が等しい場合キーで昇順にソートする -** ハッシュの要素をランダムに抽出する -** 複数のハッシュをマージする
ハッシュテーブル * リファレンスマニュアルへのリンク - [[Hash Tables - GNU Emacs Lisp Reference Manual>http://www.gnu.org/software/emacs/manual/html_node/elisp/Hash-Tables.html]] ** ハッシュを定義する &italic(){(make-hash-table &rest KEYWORD-ARGS)} #highlight(lisp) {{ (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)で比較されます。 指定したキーが存在しない場合の返値も設定可能です。 &italic(){(gethash KEY TABLE &optional DFLT)} #highlight(lisp) {{ (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") }} * ハッシュに要素を追加する &italic(){(puthash KEY VALUE TABLE)} 「ハッシュを定義する」の項目を参照 CLライブラリを使って次の様にも記述できます。 #highlight(lisp) {{ (setf (gethash KEY TABLE) VALUE) }} * ハッシュ内にキーが存在するかどうか調べる gethash関数を使って値が返ってくるかで分かります。 ただし指定したキーの要素がnilの場合があるので、正確な値を 得たい場合は別に関数を用意する必要があります。 #highlight(lisp) {{ (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 }} * ハッシュの要素数を取得する &italic(){(hash-table-count TABLE)} #highlight(lisp) {{ (hash-table-count h) ;=> 3 }} * キーが存在しない場合のデフォルト値を設定する * ハッシュからエントリを削除する &italic(){(remhash KEY TABLE)} #highlight(lisp) {{ (hash-table-count h) ;=> 3 (remhash "apple" h) ;=> nil (hash-table-count h) ;=> 2 }} ** ハッシュの全エントリに対してブロックを実行する &italic(){(maphash FUNCTION TABLE)} #highlight(lisp) {{ (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) #highlight(lisp) {{ (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 ()) }} * ハッシュを値で降順、値が等しい場合キーで昇順にソートする * ハッシュの要素をランダムに抽出する * 複数のハッシュをマージする

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

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