Skip to content

Commit 9fbac10

Browse files
committed
fix: rangeByRank return types — TreeMap returns entries, TreeSet returns keys
- TreeMap.rangeByRank → Array<[K, V | undefined]> (consistent with rangeSearch) - TreeMultiMap.rangeByRank → Array<[K, V[]]> - TreeSet.rangeByRank → K[] (consistent with rangeSearch) - TreeMultiSet.rangeByRank → K[] - Add TreeMap rangeByRank test
1 parent 95a9ec2 commit 9fbac10

5 files changed

Lines changed: 23 additions & 8 deletions

File tree

src/data-structures/binary-tree/tree-map.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4471,8 +4471,11 @@ export class TreeMap<K = any, V = any, R = [K, V]> implements Iterable<[K, V | u
44714471
* // Page 3
44724472
* console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
44734473
*/
4474-
rangeByRank(start: number, end: number): (K | undefined)[] {
4475-
return this.#core.rangeByRank(start, end);
4474+
rangeByRank(start: number, end: number): Array<[K, V | undefined]> {
4475+
const keys = this.#core.rangeByRank(start, end);
4476+
return keys
4477+
.filter((k): k is K => k !== undefined)
4478+
.map(k => [k, this.#core.get(k)] as [K, V | undefined]);
44764479
}
44774480

44784481
/**

src/data-structures/binary-tree/tree-multi-map.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4499,8 +4499,11 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
44994499
* // Page 3
45004500
* console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
45014501
*/
4502-
rangeByRank(start: number, end: number): (K | undefined)[] {
4503-
return this.#core.rangeByRank(start, end);
4502+
rangeByRank(start: number, end: number): Array<[K, V[]]> {
4503+
const keys = this.#core.rangeByRank(start, end);
4504+
return keys
4505+
.filter((k): k is K => k !== undefined)
4506+
.map(k => [k, this.#core.get(k) ?? []] as [K, V[]]);
45044507
}
45054508

45064509
/**

src/data-structures/binary-tree/tree-multi-set.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3305,8 +3305,8 @@ export class TreeMultiSet<K = any, R = K> implements Iterable<K> {
33053305
* // Page 3
33063306
* console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
33073307
*/
3308-
rangeByRank(start: number, end: number): (K | undefined)[] {
3309-
return this.#core.rangeByRank(start, end);
3308+
rangeByRank(start: number, end: number): K[] {
3309+
return this.#core.rangeByRank(start, end).filter((k): k is K => k !== undefined);
33103310
}
33113311

33123312
/**

src/data-structures/binary-tree/tree-set.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4165,8 +4165,8 @@ export class TreeSet<K = any, R = K> implements Iterable<K> {
41654165
* // Page 3
41664166
* console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
41674167
*/
4168-
rangeByRank(start: number, end: number): (K | undefined)[] {
4169-
return this.#core.rangeByRank(start, end);
4168+
rangeByRank(start: number, end: number): K[] {
4169+
return this.#core.rangeByRank(start, end).filter((k): k is K => k !== undefined);
41704170
}
41714171

41724172
/**

test/unit/data-structures/binary-tree/bst.order-statistic.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,15 @@ describe('Order Statistic Tree', () => {
330330
expect(map.rank('aaa')).toBe(0); // before alice
331331
expect(map.rank('bbb')).toBe(1); // between alice and bob
332332
});
333+
334+
it('rangeByRank should return entries [key, value]', () => {
335+
const map = new TreeMap<string, number>(
336+
[['alice', 95], ['bob', 87], ['charlie', 92]],
337+
{ enableOrderStatistic: true }
338+
);
339+
const result = map.rangeByRank(0, 1);
340+
expect(result).toEqual([['alice', 95], ['bob', 87]]);
341+
});
333342
});
334343

335344
describe('TreeSet', () => {

0 commit comments

Comments
 (0)