SDBM ファイルをアクセスするクラス。
キー、データともに文字列でなければならないという制限と、データがファイルに保存されるという点を除いては Hash クラスと全く同様に扱うことができます。
@see Hash
new(dbname, mode = 0666) -> SDBM
[permalink][rdoc]dbname で指定したデータベースをモードを mode に設定してオープンします。
open(dbname, mode = 0666) -> SDBM
[permalink][rdoc]open(dbname, mode = 0666) {|db| ... } -> object
dbname で指定したデータベースをモードを mode に設定してオープンします。
self[key] -> String
[permalink][rdoc]key をキーとする値を返します。
self[key] = value
[permalink][rdoc]key をキーとして、value を格納します。
value として nil を指定すると、key に対する項目を削除します。
clear -> self
[permalink][rdoc]DBM ファイルを空にします。
close -> nil
[permalink][rdoc]DBM ファイルをクローズします。
以後の操作は例外を発生させます。
closed? -> bool
[permalink][rdoc]DBM ファイルが既に閉じられているかどうかを返します。
既に閉じられていれば true を返します。そうでなければ false を返します。
delete(key) -> String
[permalink][rdoc]key をキーとする項目を削除します。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' p db1.delete('a') #=> 'aaa'
reject! { |key, value| ... } -> self
[permalink][rdoc]delete_if { |key, value| ... } -> self
ブロックを評価した値が真であれば該当する項目を削除します。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' p db1 #=> #<SDBM:0xb7cc96f8> p db1.reject!{ |key, value| key == 'a' } #=> #<SDBM:0xb7cc96f8>
each {|key, value| ... } -> self
[permalink][rdoc]each_pair {|key, value| ... } -> self
各要素に対するイテレータ。
each_key {|key| ... } -> self
[permalink][rdoc]全ての key に対して繰り返すイテレータ。
each_value {|value| ... } -> self
[permalink][rdoc]全ての value に対して繰り返すイテレータ。
empty? -> bool
[permalink][rdoc]データベースが空の時、真を返します。
fetch(key, ifnone = nil) {|key| ... } -> object
[permalink][rdoc]データベースから対応するキーを探してその要素の値を返します。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' p db1.fetch('a') #=> "aaa" p db1.fetch('z', 'zzz') #=> "zzz" p db1.fetch('z'){|key| [:key, key] } #=> [:key, "z"] p db1.fetch('z', 'zzz'){|key| [:key, key] } #=> "zzz" p db1.fetch('z') #=> IndexError 発生
has_key?(key) -> bool
[permalink][rdoc]key?(key) -> bool
include?(key) -> bool
member?(key) -> bool
key がデータベース中に存在する時、真を返します。
has_value?(value) -> bool
[permalink][rdoc]value?(value) -> bool
value を値とする組がデータベース中に存在する時、真を返します。
index(val) -> String | nil
[permalink][rdoc]このメソッドは deprecated です。SDBM#key を使用してください。
invert -> Hash
[permalink][rdoc]値からキーへのハッシュを返します。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1.clear db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' p db1.invert #=> {"aaa"=>"a", "bbb"=>"b", "ccc"=>"c"}
key(value) -> String | nil
[permalink][rdoc]与えられた値に対応するキーを返します。
対応する要素が存在しない時には nil を返します。値に対応するキーが複数ある場合は最初に見つかったキーを返します。
keys -> [String]
[permalink][rdoc]データベース中に存在するキー全てを含む配列を返します。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' p db1.keys #=> ["a", "b","c"]
length -> Integer
[permalink][rdoc]size -> Integer
データベース中の要素の数を返します。
現在の実現では要素数を数えるためにデータベースを全部検索します。
reject {|key, value| ... } -> Hash
[permalink][rdoc]ブロックを評価した値が真であれば該当する要素を削除します。
self.to_hash.reject{|key, value| ... }
と同じです。
[SEE_ALSO] Hash#reject
replace(other) -> self
[permalink][rdoc]self の内容を other の内容で置き換えます。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' db2 = SDBM.open('bbb.gdbm', 0666) db2['c'] = 'ccc' db2['d'] = 'ddd' hash = { 'x' => 'xxx', 'y' => 'yyy'} p db1 #=> #<SDBM:0xb7c304d0> p db1.to_hash #=> {"a"=>"aaa", "b"=>"bbb", "c"=>"ccc"} p db1.replace(db2) #=> #<SDBM:0xb7c304d0> p db1.to_hash #=> {"c"=>"ccc", "d"=>"ddd"} p db1.replace(hash) #=> #<SDBM:0xb7c304d0> p db1.to_hash #=> {"x"=>"xxx", "y"=>"yyy"}
select {|key, value| ... } -> [[String]]
[permalink][rdoc]ブロックを評価して真になった要素のみを配列に格納して返します。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1.clear db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' p db1.select{ |key, value| key == 'a' } #=> [["a", "aaa"]] p db1.select{ |key, value| key != 'a' } #=> [["c", "ccc"], ["b", "bbb"]]
shift -> [String]
[permalink][rdoc]データベース中の要素を一つ取り出し、データベースから削除します。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' p db1.shift #=> ["a", "aaa"]
store(key, val) -> [String]
[permalink][rdoc]key に対して val を格納します。
[SEE_ALSO] SDBM#[]=
to_a -> [[String]]
[permalink][rdoc]self の各要素を格納した配列を返します。
返される配列の1つの要素は [key, value] です。つまり配列の配列を返します。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1.clear db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' p db1.to_a #=> [["a", "aaa"], ["b", "bbb"], ["c", "ccc"]]
to_hash -> Hash
[permalink][rdoc]self の各要素を格納したハッシュを返します。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1.clear db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' p db1.to_hash #=> {"a"=>"aaa", "b"=>"bbb", "c"=>"ccc"}
update(other) -> self
[permalink][rdoc]self と other の内容をマージします。
重複するキーに対応する値はother の内容で上書きされます。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1.clear db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' db2 = SDBM.open('bbb.gdbm', 0666) db2.clear db2['c'] = 'ccc' db2['d'] = 'ddd' hash = { 'x' => 'xxx', 'y' => 'yyy'} p db1 #=> #<SDBM:0xb7d19554> p db1.to_hash #=> {"a"=>"aaa", "b"=>"bbb", "c"=>"ccc"} p db1.update(db2) #=> #<SDBM:0xb7d19554> p db1.to_hash #=> {"a"=>"aaa", "b"=>"bbb", "c"=>"ccc", "d"=>"ddd"} p db1.update(hash) #=> #<SDBM:0xb7d19554> p db1.to_hash #=> {"a"=>"aaa", "x"=>"xxx", "b"=>"bbb", "y"=>"yyy", "c"=>"ccc", "d"=>"ddd"}
values -> [String]
[permalink][rdoc]データベース中に存在する値全てを含む配列を返します。
values_at(*keys) -> [String]
[permalink][rdoc]keys に対応する値を配列に格納して返します。
require 'sdbm' db1 = SDBM.open('aaa.gdbm', 0666) db1['a'] = 'aaa' db1['b'] = 'bbb' db1['c'] = 'ccc' p db1.values_at('a', 'b') #=> ["aaa", "bbb"]