这是一个c++风格的map, 底层使用红黑树实现
npm install @trudbot/map
import {EasyMap} from '@trudbot/map';
const map = new EasyMap<number, number>();
map.insert(1, 2);
map.insert(2, 3);
console.log(map.get(1)); // 2
map.erase(1);
console.log(map.get(1)); // null
const proxy = map.createProxy(p => {
if (typeof p === 'number') return p;
if (typeof p === 'string') {
const num = parseInt(p);
return isNaN(num) ? null : num;
}
return null;
});
console.log(proxy.get(2)); // 3
proxy[2] = 4;
console.log(proxy.get(2)); // 4
proxy[2] ++;
console.log(proxy.get(2)); // 5
-
compare
比较函数, 需要返回COMPARE_RESULT
枚举值
export type Compare<K> = (a: K, b: K) =>
COMPARE_RESULT.MORE | // a > b
COMPARE_RESULT.EQUAL | // a === b
COMPARE_RESULT.LESS; // a < b
-
defaultValue
默认值 该值只会在使用proxy
时起作用, 如
const map = new map<number, number>({defaultValue: 0});
const proxy = map.createProxy(p => {
if (typeof p === 'number') return p;
if (typeof p === 'string') {
const num = parseInt(p);
return isNaN(num) ? null : num;
}
return null;
});
console.log(proxy[1]); // 0
插入一个键值对, 返回值为插入的节点
删除一个键值对, 返回删除的节点
获取一个键值对, 如果不存在则返回null
清空所有键值对
返回所有的键, 按键升序
返回所有的值, 按键升序
返回所有的键值对, 按键升序
返回map中键值对的数量
返回指定键的数量, 0或1
返回map中是否存在指定键
创建一个map代理, 代理 支持通过中括号表达式存取键值对。
按键升序遍历map中的键值对
proxyMap支持通过中括号表达式存取键值对。
在createProxy时传入的转换函数, 用于将中括号表达式的键转换为map中的键
PropertyKey
是string | number | symbol
的联合类型。
const map = new map<number, number>({defaultValue: 0});
const proxy = map.createProxy(p => {
if (typeof p === 'number') return p;
if (typeof p === 'string') {
const num = parseInt(p);
return isNaN(num) ? null : num;
}
return null;
});
proxy[1] // map.get(1)
proxy[1] = 2 // map.insert(1, 2), 此处与insert不完全等价, 因为proxy[1]只会返回true
delete proxy[1] // map.erase(1), 此处与erase不完全等价, 因为delete proxy[1]只会返回true
1 in proxy // map.has(1)
proxy[1] ++ // map.insert(1, map.get(1))
// ...