rbtree-ruby 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/README.ja.md +13 -13
- data/README.md +13 -13
- data/lib/rbtree/version.rb +1 -1
- data/lib/rbtree.old.rb +1588 -0
- data/lib/rbtree.rb +306 -182
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 28594e663eac8519467b09c0756a032b2ef887d69df9e9335d1d79c36744a134
|
|
4
|
+
data.tar.gz: 492d6896dd4a0644ecc8ad721214afe2827daf3acbde38dce938e6da54cac87f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3aeeca5b0d3de1a8826fac660dc6b201c046cb193328ba75bcd20f679f682fbf65479179fcddebe63920522eaa9ede28a9f8a784c76387e86530105a7378c8cd
|
|
7
|
+
data.tar.gz: 1e960a2132c1c3bc8988e233ebfb249f121900ac6eabbbcce0aa86186ceb24caa3224d4e7ebb8ad2acda5b927976ec0d5a0437ec20ad5fe2162eda841d15f909
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,27 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.3.0] - 2026-01-15
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
### API Changes (Method Renaming & Deprecation)
|
|
12
|
+
> [!WARNING]
|
|
13
|
+
> The public API has been refactored to improve consistency. The following methods have been renamed.
|
|
14
|
+
> Old methods are preserved as aliases for backward compatibility but are **deprecated** and may be removed in future versions.
|
|
15
|
+
|
|
16
|
+
* `get_all` -> `values` (Returns Enumerator by default)
|
|
17
|
+
* `delete_one` -> `delete_value`
|
|
18
|
+
* `delete` (MultiRBTree) -> `delete_key`
|
|
19
|
+
* *Note: `delete` is now an alias for `delete_key` in MultiRBTree for compatibility.*
|
|
20
|
+
* `get` (MultiRBTree) -> *Behavior clarified*: Returns first value (alias for `first_value` or `value(key)`)
|
|
21
|
+
* `get_first`/`get_last` -> `first_value`/`last_value`
|
|
22
|
+
* `delete_first`/`delete_last` -> `delete_first_value`/`delete_last_value`
|
|
23
|
+
|
|
24
|
+
- **Visibility**: `insert_entry` (RBTree) and traversal helper methods (MultiRBTree) are now `private` instead of `protected`, as they are internal implementation details.
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
- **MultiRBTree Traversal Fix**: Fixed an issue where `MultiRBTree#each` and other traversal methods yielded `key, value` as separate arguments instead of a single `[key, value]` array. This ensures compatibility with `Enumerable` methods like `count` and consistent behavior with `RBTree` and standard `Hash`.
|
|
28
|
+
|
|
8
29
|
## [0.2.3] - 2026-01-14
|
|
9
30
|
|
|
10
31
|
### Added
|
|
@@ -163,6 +184,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
163
184
|
- ASCII diagrams for tree rotation operations
|
|
164
185
|
- MIT License (Copyright © 2026 Masahito Suzuki)
|
|
165
186
|
|
|
187
|
+
[0.3.0]: https://github.com/firelzrd/rbtree-ruby/releases/tag/v0.3.0
|
|
188
|
+
[0.2.3]: https://github.com/firelzrd/rbtree-ruby/releases/tag/v0.2.3
|
|
189
|
+
[0.2.2]: https://github.com/firelzrd/rbtree-ruby/releases/tag/v0.2.2
|
|
190
|
+
[0.2.1]: https://github.com/firelzrd/rbtree-ruby/releases/tag/v0.2.1
|
|
166
191
|
[0.2.0]: https://github.com/firelzrd/rbtree-ruby/releases/tag/v0.2.0
|
|
167
192
|
[0.1.8]: https://github.com/firelzrd/rbtree-ruby/releases/tag/v0.1.8
|
|
168
193
|
[0.1.7]: https://github.com/firelzrd/rbtree-ruby/releases/tag/v0.1.7
|
data/README.ja.md
CHANGED
|
@@ -108,11 +108,11 @@ tree.insert(2, 'two')
|
|
|
108
108
|
tree.size # => 4 (キーバリューペアの総数)
|
|
109
109
|
|
|
110
110
|
# 最初の値を取得
|
|
111
|
-
tree.
|
|
111
|
+
tree.value(1) # => "first one"
|
|
112
112
|
tree[1] # => "first one"
|
|
113
113
|
|
|
114
114
|
# キーの全ての値を取得(Enumeratorを返す)
|
|
115
|
-
tree.
|
|
115
|
+
tree.values(1).to_a # => ["first one", "second one", "third one"]
|
|
116
116
|
|
|
117
117
|
# 全キーバリューペアをイテレーション
|
|
118
118
|
tree.each { |k, v| puts "#{k}: #{v}" }
|
|
@@ -123,11 +123,11 @@ tree.each { |k, v| puts "#{k}: #{v}" }
|
|
|
123
123
|
# 2: two
|
|
124
124
|
|
|
125
125
|
# 最初の値のみ削除
|
|
126
|
-
tree.
|
|
127
|
-
tree.
|
|
126
|
+
tree.delete_value(1) # => "first one"
|
|
127
|
+
tree.value(1) # => "second one"
|
|
128
128
|
|
|
129
129
|
# キーの全ての値を削除
|
|
130
|
-
tree.
|
|
130
|
+
tree.delete_key(1) # 残りの値を全て削除
|
|
131
131
|
```
|
|
132
132
|
|
|
133
133
|
### 最近傍キー検索
|
|
@@ -185,15 +185,15 @@ tree.insert(1, 'second')
|
|
|
185
185
|
tree.insert(1, 'third')
|
|
186
186
|
|
|
187
187
|
# 最初または最後の値にアクセス
|
|
188
|
-
tree.
|
|
189
|
-
tree.
|
|
190
|
-
tree.
|
|
191
|
-
tree.
|
|
188
|
+
tree.value(1) # => "first"
|
|
189
|
+
tree.value(1, last: true) # => "third"
|
|
190
|
+
tree.first_value(1) # => "first"
|
|
191
|
+
tree.last_value(1) # => "third"
|
|
192
192
|
|
|
193
193
|
# どちらの端からも削除可能
|
|
194
|
-
tree.
|
|
195
|
-
tree.
|
|
196
|
-
tree.
|
|
194
|
+
tree.delete_first_value(1) # => "first"
|
|
195
|
+
tree.delete_last_value(1) # => "third"
|
|
196
|
+
tree.value(1) # => "second"
|
|
197
197
|
|
|
198
198
|
# min/maxの:lastオプション
|
|
199
199
|
tree.insert(2, 'a')
|
|
@@ -208,7 +208,7 @@ tree.max(last: true) # => [2, "b"] (最大キーの最後の値)
|
|
|
208
208
|
|
|
209
209
|
- `insert(key, value)` - O(log n)
|
|
210
210
|
- `delete(key)` - O(log n)
|
|
211
|
-
- `
|
|
211
|
+
- `value(key)` / `[]` - **O(1)** (内部ハッシュインデックスによる超高速アクセス)
|
|
212
212
|
- `has_key?` - **O(1)** (内部ハッシュインデックスによる超高速チェック)
|
|
213
213
|
- `min` - **O(1)**
|
|
214
214
|
- `max` - O(log n)
|
data/README.md
CHANGED
|
@@ -108,11 +108,11 @@ tree.insert(2, 'two')
|
|
|
108
108
|
tree.size # => 4 (total number of key-value pairs)
|
|
109
109
|
|
|
110
110
|
# Get first value
|
|
111
|
-
tree.
|
|
111
|
+
tree.value(1) # => "first one"
|
|
112
112
|
tree[1] # => "first one"
|
|
113
113
|
|
|
114
114
|
# Get all values for a key (returns Enumerator)
|
|
115
|
-
tree.
|
|
115
|
+
tree.values(1).to_a # => ["first one", "second one", "third one"]
|
|
116
116
|
|
|
117
117
|
# Iterate over all key-value pairs
|
|
118
118
|
tree.each { |k, v| puts "#{k}: #{v}" }
|
|
@@ -123,11 +123,11 @@ tree.each { |k, v| puts "#{k}: #{v}" }
|
|
|
123
123
|
# 2: two
|
|
124
124
|
|
|
125
125
|
# Delete only first value
|
|
126
|
-
tree.
|
|
127
|
-
tree.
|
|
126
|
+
tree.delete_value(1) # => "first one"
|
|
127
|
+
tree.value(1) # => "second one"
|
|
128
128
|
|
|
129
129
|
# Delete all values for a key
|
|
130
|
-
tree.
|
|
130
|
+
tree.delete_key(1) # removes all remaining values
|
|
131
131
|
```
|
|
132
132
|
|
|
133
133
|
### Nearest Key Search
|
|
@@ -185,15 +185,15 @@ tree.insert(1, 'second')
|
|
|
185
185
|
tree.insert(1, 'third')
|
|
186
186
|
|
|
187
187
|
# Access first or last value
|
|
188
|
-
tree.
|
|
189
|
-
tree.
|
|
190
|
-
tree.
|
|
191
|
-
tree.
|
|
188
|
+
tree.value(1) # => "first"
|
|
189
|
+
tree.value(1, last: true) # => "third"
|
|
190
|
+
tree.first_value(1) # => "first"
|
|
191
|
+
tree.last_value(1) # => "third"
|
|
192
192
|
|
|
193
193
|
# Delete from either end
|
|
194
|
-
tree.
|
|
195
|
-
tree.
|
|
196
|
-
tree.
|
|
194
|
+
tree.delete_first_value(1) # => "first"
|
|
195
|
+
tree.delete_last_value(1) # => "third"
|
|
196
|
+
tree.value(1) # => "second"
|
|
197
197
|
|
|
198
198
|
# min/max with :last option
|
|
199
199
|
tree.insert(2, 'a')
|
|
@@ -208,7 +208,7 @@ All major operations run in **O(log n)** time:
|
|
|
208
208
|
|
|
209
209
|
- `insert(key, value)` - O(log n)
|
|
210
210
|
- `delete(key)` - O(log n)
|
|
211
|
-
- `
|
|
211
|
+
- `value(key)` / `[]` - **O(1)** (hybrid hash index)
|
|
212
212
|
- `has_key?` - **O(1)** (hybrid hash index)
|
|
213
213
|
- `min` - **O(1)**
|
|
214
214
|
- `max` - O(log n)
|
data/lib/rbtree/version.rb
CHANGED