8次发布
0.1.7 | 2021年5月7日 |
---|---|
0.1.6 | 2021年2月10日 |
0.1.5 | 2020年12月3日 |
#317 在 解析工具
每月109次下载
27KB
575 行
具有共享所有权的 String
。
对于需要从字符串解析并分割成更小部分的类型很有帮助,例如 Url
或需要由父类型拥有的行的 Vec
。
注意
首先尝试存储引用,例如 &str
,这更有效。
目前,如果您创建了一个 SharedString
,则底层字节不能再被修改。
示例
use shared_string::SharedString;
// or SharedSyncString if `Sync` is required
struct Name {
firstname: SharedString,
middlename: SharedString,
lastname: SharedString
// to be faster than string
// you should use at least 3 fields
}
impl Name {
pub fn new(fullname: impl Into<SharedString>) -> Option<Self> {
let mut split = fullname.into().split(b' ');
Some(Self {
firstname: split.next()?,
middlename: split.next()?,
lastname: split.next()?
})
}
}
let name = Name::new("Bartholomew Jojo Simpson").unwrap();
assert_eq!(name.firstname, "Bartholomew");
assert_eq!(name.middlename, "Jojo");
assert_eq!(name.lastname, "Simpson");
性能
SharedString
可以通过如上例所示的场景提高性能超过30%。请参阅benches/*
以获取基准测试。