回答編集履歴

2

追記

2018/08/24 22:15

投稿

otn
otn

スコア84603

test CHANGED
@@ -48,4 +48,18 @@
48
48
 
49
49
  要素が削除される場合があると面倒ですね。
50
50
 
51
+
52
+
53
+ 最小キーをプログラムの実行を越えて永続化したいのであれば、`@lowest_key`を`self["0"]`にでも保持すれば良い。
54
+
55
+ ```Ruby
56
+
57
+ if not @lowest_key or @lowest_key > key
58
+
59
+ @lowest_key = key
60
+
61
+ super("0",@lowest_ley) # self["0"]=@lowest_keyはだめ
62
+
63
+ end
64
+
51
65
  ```

1

最小キーの保持

2018/08/24 22:15

投稿

otn
otn

スコア84603

test CHANGED
@@ -1 +1,51 @@
1
1
  `keys`を得てソートするくらいしか無いと思います。
2
+
3
+
4
+
5
+ #追記
6
+
7
+ 最小のキーを保持するとすると、`GDBM`のサブクラスを作ってそこで、キーの最小値をチェックして、保持する。
8
+
9
+ ```Ruby
10
+
11
+ class MyGDBM < GDBM
12
+
13
+ def []=(key,val)
14
+
15
+ super
16
+
17
+ if not @lowest_key or @lowest_key > key
18
+
19
+ @lowest_key = key
20
+
21
+ end
22
+
23
+ end
24
+
25
+ attr_reader :lowest_key
26
+
27
+ end
28
+
29
+
30
+
31
+ MyGDBM.open("/tmp/sample.db") do |db|
32
+
33
+ db["a"]="1"
34
+
35
+ db["A"]="1"
36
+
37
+ db["0"]="1"
38
+
39
+ p db.keys
40
+
41
+ p db.lowest_key
42
+
43
+ end
44
+
45
+ ```
46
+
47
+ `[]=`以外のメソッドでキーを追加する事があるのであれば、それも同様に。
48
+
49
+ 要素が削除される場合があると面倒ですね。
50
+
51
+ ```