gpt4 book ai didi

string - 如何加速 UTF-8 字符串处理

转载 作者:行者123 更新时间:2023-11-29 07:50:12 28 4
gpt4 key购买 nike

我正在解析制表符分隔值:

pub fn parse_tsv(line: &str) -> MyType {
for (i, value) in line.split('\t').enumerate() {
// ...
}
// ...
}

perf top 包含 str.find。当我查看生成的汇编代码时,有很多与 &str 中符号的 UTF-8 编码相关的工作。

而且速度相对较慢。它占用了 99% 的执行时间。

但是要查找 \t,我不能简单地在 UTF-8 字符串中搜索一个字节的 \t

我做错了什么? Rust stdlib 做错了什么?

或者也许在 Rust 中有一些字符串库可以简单地用 'u8' 字节表示字符串?但是所有的 split()find() 和其他方法?

最佳答案

只要您的字符串是 ASCII 或者您不需要匹配 UTF-8 标量(例如,在您的情况下,您在其中搜索制表符),您可以将其视为带有 as_bytes 的字节() 方法,然后对 u8 字符(字节)而不是 char(UTF-8 标量)进行操作。这应该快得多。使用 &[u8],这是一个 slice ,您仍然可以使用适用于 &str 切片的方法,如 split()find()

let line = String::new();
let bytes = line.as_bytes();

pub fn parse_tsv(line: &[u8]) {
for (i, value) in line.split(|c| *c == b'\t').enumerate() {

}
}

fn main() {
let line = String::new();
let bytes = line.as_bytes();

parse_tsv(&bytes)
}

关于string - 如何加速 UTF-8 字符串处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41608220/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com