6个版本 (重大更新)
0.6.0 | 2022年9月19日 |
---|---|
0.5.1 | 2022年1月25日 |
0.4.0 | 2021年3月26日 |
0.3.0 | 2020年11月18日 |
0.1.0 | 2019年12月13日 |
#192 在 文本处理
27,250 每月下载量
在 129 个crate中(9个直接使用)
220KB
4K SLoC
unicode-general-category
使用Unicode 15.0数据在Rust中对char的Unicode通用类别属性进行快速查找。此crate与no-std兼容。
用法
use unicode_general_category::{get_general_category, GeneralCategory};
fn main() {
assert_eq!(get_general_category('A'), GeneralCategory::UppercaseLetter);
}
性能与实现说明
ucd-generate用于生成tables.rs
。构建脚本(build.rs
)将其编译成两层查找表。查找时间为常数,因为它只是对两个数组进行索引。
两层方法将码点映射到块,然后映射到块内的位置。这允许第二层块进行去重,节省空间。代码通过块大小进行参数化,块大小必须是2的幂。构建脚本中的值对于数据集是最佳的。
这种方法以一些空间为代价换取更快的查找。表占用大约45KiB。基准测试表明,这种方法比典型的二分查找方法快5-10倍。
可能还有进一步的优化可以消除第一级数组中的某些重复值的序列。