您是否还在为 JS 中没有标准的数据结构库而烦恼?
您是否想要在 JS 中拥有一个像 C++ STL 那样拥有各种标准数据结构的 package?
现在,它来了
js-sdsl,一个以 C++ STL 为基准实现的 JS 库
js-sdsl
github 项目地址:github.com/ZLY201/js-s…
包含的数据结构
- Vector
- Stack
- Queue
- LinkList
- Deque
- PriorityQueue
- Set (using RBTree)
- Map (using RBTree)
- HashSet (for reference only)
- HashMap (for reference only)
支持的平台
- node.js (using commonjs)
- react/vue (using es5)
- browser (support most browsers including IE8+)
下载
直接下载
- js-sdsl.js (for development)
- js-sdsl.min.js (for production)
或者使用 npm
npm install js-sdsl
使用
为了帮助您使用,我们提供了完整的 API 文档
在浏览器中使用
<!-- you can download the file locally and import it or import it dynamically by using url. -->
<script src="https://zly201.github.io/js-sdsl/js-sdsl.min.js"></script>
<script>
const { Vector } = sdsl;
const myVector = new Vector();
// your code here...
</script>
其他
就像其他的 package 一样,查看 src/test.ts 可能会有所帮助
从源码构建
你可以 pull 这个存储库并运行 yarn build 来重建这个库
测试
在发布之前,我们对每个功能都进行了严格的单元测试,您可以查看 testResult.txt 找到我们的测试结果或运行 yarn test 来重现它
许可证
注意
请注意,我们的正式版本是从 2.0.0 开始的。为避免不必要的麻烦,下载时请选择最新版本(>=2.0.0)
不幸的是,我尽力提高哈希表的性能但失败了。理想情况下,哈希表应该是 O(1),在我的项目中,当每个 bucket 的大小为 1 时,它的时间比 Set 和 Map 要长得多
经过分析,我发现当大小为 时,操作符 new 的开销接近 2s,这似乎是 JS 语言的瓶颈
您可以尝试下面的代码来验证我的说法
console.time("run");
const arr = new Array(1000000);
arr[100000] = new Array();
console.timeEnd("run");
你可以想象当我多次重复上述操作时会发生什么
如果你想在 JS 中使用 hash 容器,请在 ES6 中使用 set 或 map
官方的 Set 和 Map 是使用哈希表而不是 RBTree 来实现的
关于 JS 哈希表的更多信息,请参考 stackoverflow.com/questions/3…