Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > sdbmライブラリ > SDBMクラス

class SDBM

クラスの継承リスト: SDBM < Enumerable < Object < Kernel

要約

SDBM ファイルをアクセスするクラス。

キー、データともに文字列でなければならないという制限と、 データがファイルに保存されるという点を除いては Hash クラスと 全く同様に扱うことができます。

@see Hash

目次

特異メソッド
new open
インスタンスメソッド
[] []= clear close closed? delete delete_if reject! each each_pair each_key each_value empty? fetch has_key? include? key? member? has_value? value? index indexes indices invert keys length size reject replace select shift store to_a to_hash update values values_at

特異メソッド

new(dbname, mode = 0666) -> SDBM[permalink][rdoc]

dbname で指定したデータベースをモードを mode に設定してオープンします。

[PARAM] dbname:
データベースの名前を指定します。
[PARAM] mode:
省略値は 0666 です。mode として nil を指定するとデータベースが 存在しない時には新たなデータベースを作らず nil を返します。
open(dbname, mode = 0666) -> SDBM[permalink][rdoc]
open(dbname, mode = 0666) {|db| ... } -> object

dbname で指定したデータベースをモードを mode に設定してオープンします。

[PARAM] dbname:
データベースの名前を指定します。
[PARAM] mode:
省略値は 0666 です。mode として nil を指定するとデータベースが 存在しない時には新たなデータベースを作らず nil を返します。

インスタンスメソッド

self[key] -> String[permalink][rdoc]

key をキーとする値を返します。

[PARAM] key:
キー。
self[key] = value[permalink][rdoc]

key をキーとして、value を格納します。

value として nil を指定すると、key に対する項目を削除します。

[PARAM] key:
キー。
[PARAM] value:
格納する値。
clear -> self[permalink][rdoc]

DBM ファイルを空にします。

close -> nil[permalink][rdoc]

DBM ファイルをクローズします。

以後の操作は例外を発生させます。

closed? -> bool[permalink][rdoc]

DBM ファイルが既に閉じられているかどうかを返します。

既に閉じられていれば true を返します。 そうでなければ false を返します。

delete(key) -> String[permalink][rdoc]

key をキーとする項目を削除します。

[PARAM] key:
キー。
[RETURN]
削除した要素の値を返します。
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]

データベースから対応するキーを探してその要素の値を返します。

[PARAM] key:
探索するキー。
[PARAM] ifnone:
対応するキーが見つからなかった場合に返す値。
[EXCEPTION] IndexError:
ifnone が設定されていないときに、対応するキーが 見つからなかった場合に発生します。
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 がデータベース中に存在する時、真を返します。

[PARAM] key:
検索したいキー。
has_value?(value) -> bool[permalink][rdoc]
value?(value) -> bool

value を値とする組がデータベース中に存在する時、真を返します。

[PARAM] value:
検索したい値。
index(val) -> String | nil[permalink][rdoc]

値 val に対応するキーを返します。

対応する要素が存在しない時には nil を返します。 該当するキーが複数存在する場合、どのキーを返すかは不定です。

[SEE_ALSO] Hash#index

indexes(*keys) -> [[String]][permalink][rdoc]
indices(*keys) -> [[String]]

各引数の値をキーとする要素を含む配列を返します。

このメソッドは obsolete です。

[PARAM] keys:
検索したいキーです。
require 'sdbm'

db1 = SDBM.open('aaa.gdbm', 0666)
db1['a'] = 'aaa'
db1['b'] = 'bbb'
db1['c'] = 'ccc'

p db1.indexes('a', 'b') #=> ["aaa", "bbb"]
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"}
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 の内容で置き換えます。

[PARAM] other:
each_pair メソッドを持つオブジェクトでなければなりません。
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 の内容で上書きされます。

[PARAM] other:
each_pair メソッドを持つオブジェクトでなければなりません。
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 に対応する値を配列に格納して返します。

[PARAM] 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"]