[英]Rust example in Rust Book: for loop over a range
在 Rust Book 中有一个关于音频编码器的有趣示例: Comparing Performance: Loops vs. Iterators
let buffer: &mut [i32];
let coefficients: [i64; 12];
let qlp_shift: i16;
for i in 12..buffer.len() {
let prediction = coefficients.iter()
.zip(&buffer[i - 12..i])
.map(|(&c, &s)| c * s as i64)
.sum::<i64>() >> qlp_shift;
let delta = buffer[i];
buffer[i] = prediction as i32 + delta;
}
我无法得到迭代这个 for 循环的内容。 在我看来, 12..buffer.len()
会从缓冲区的第 13 个字节迭代到缓冲区的末尾。 这没有多大意义。
此外,在压缩时,它会将系数中的当前项配对buffer[i - 12..i]
coefficients.iter()
——并与buffer[i - 12..i]
配对,这又没有意义,因为我不知道你怎么能接受索引i
并减去一个范围,如12..i
。
欢迎任何帮助!
循环从12
开始,从而跳过缓冲区中的前 12 个元素:
for i in 12..buffer.len() {
正如评论中指出的, buffer[i - 12..i]
实际上被 Rust 解析器解释为buffer[(i - 12)..i]
。 因此,在算法的后面,它引用了前面的 12 个元素:
.zip(&buffer[i - 12..i])
这是创建一个 12 个元素的滑动窗口,从当前索引之前的 12 个元素开始,然后用 12 个系数的固定数组压缩它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.