3 个不稳定版本
0.2.0 | 2024年1月20日 |
---|---|
0.1.1 | 2024年1月13日 |
0.1.0 | 2024年1月8日 |
#11 in #mut
每月 31 次下载
21KB
272 行
MutStr
MutStr 是一个很好的解决方案,如果您想减少如哈希表(如 <String, String>
)的内存消耗,并且需要比 Box<str>
更高效的解决方案,因为您需要在运行时更改数据。
如果运行时不需要更改数据,请使用 Box<str>
。如果您在添加新数据时更看重速度,请选择 String
。如果您需要低内存消耗和可更改的数据,请选择 MutStr
。
“...比 Box<str>
更高效...”是什么意思?
Box<str>
的内部值不能更改,因此,旧的 Box<str>
必须被替换为一个新分配的 Box<str>
,这比重新分配内部值更不高效。请参阅我们的基准测试
基准测试结果
此基准测试于 2024年1月13日
更新,可在 此处 找到。
create_box 28 ns/iter (+/- 3)
create_string 28 ns/iter (+/- 1)
create_mutstr 28 ns/iter (+/- 0)
replace_box_data 104 ns/iter (+/- 3)
replace_string_data 85 ns/iter (+/- 7)
replace_mutstr_data 82 ns/iter (+/- 1)
示例
您可以使用 MutStr
轻松添加新值或删除现有值。
use mutstr::mutstr;
fn main() {
let mut result = mutstr::from("hello");
result += " my friend"; // Add -> " my friend"
result -= " friend"; // Remove -> " friend"
assert_eq!(result.as_str(), "hello my");
result.push(" friend friend friend"); // Add -> " friend friend friend"
result -= (2, " friend"); // Remove(2 times) -> " friend"
assert_eq!(result.as_str(), "hello my friend");
result += String::from(" :)"); // Add -> " :)"
assert_eq!(result.as_str(), "hello my friend :)");
}
示例
您可以从 MutStr
轻松获取一个 &str
,就像使用 String
一样。
use mutstr::mutstr;
fn main() {
let first = String::from("hello friend");
let first_str = &*first; // String as `&str`
let second = mutstr::from("hello friend");
let second_str = &*second; // MutStr as `&str`
assert_eq!(first_str, second_str);
}
示例
您可以将 MutStr
容易地用于哈希表和向量中,就像您可以使用 Box<str>
一样。
use std::collections::HashMap;
use mutstr::mutstr;
fn main() {
let mut result = HashMap::<Box<str>, mutstr>::new();
result.insert(Box::from("hello"), mutstr::from("friend"));
let value = result.get_mut("hello").unwrap();
*value += " :)";
assert_eq!(value.as_str(), "friend :)");
}
依赖项
~175KB