Rust 中的 bytes().nth() 与 chars().nth()

问题描述 投票:0回答:1

我最近发现 bytes.nth(i) 比 chars.nth(i) 快得多,并发现解释是因为 bytes.nth() 的时间复杂度为 O(1),而 chars.nth() 的时间复杂度为 O(1)在)。但为什么会这样呢?

我还看到了实例化变量并使用 chars.next() / .next_back() 的建议,如下例所示。

let mut word1_chars = word1.chars();

for i in (0..word1.len()).rev() {
    ...
    word1_chars.next_back()
}

当我看到这个速度更快时,我感到震惊。我认为这一切都有一个合乎逻辑的解释,所以如果您知道,请分享:)。

提前致谢

rust iterator char byte element
1个回答
0
投票

.chars()
枚举字符串的
char
,而不仅仅是字节。
例如,来自 C
char
(考虑到文本)和 byte(一个小整数)之间存在历史性的混淆;在快速而肮脏的尝试中,我们不会费心去区分。

另一方面,在 Rust 中,字符不是单个字节,而是一个更宽的整数,可能是解码 UTF-8 字节序列的结果。
这样的 single

char
可能来自一个、两个、三个或四个字节的序列。
Rust 字符串采用 UTF-8 编码,因此无法在恒定时间内访问第 N^ 个
char
,因为前面的每个
char
都可能由不同的字节组成。 每一个都必须按顺序解码,当 N 个
char
被解码时我们停止。

© www.soinside.com 2019 - 2024. All rights reserved.