gpt4 book ai didi

vector - 压缩可变向量迭代器的惯用 Rust 代码

转载 作者:行者123 更新时间:2023-11-29 08:03:14 27 4
gpt4 key购买 nike

我正在做 Matasano crypto challenge在尝试使用 Rust 时(以惯用的方式)。

second assignment是异或两个向量。我现在的代码是:

extern crate rustc_serialize;

use rustc_serialize::hex::{FromHex,ToHex};

pub fn fixed_xor(l: &str, r: &str) -> String {
let mut l = l.from_hex().unwrap();
let r = r.from_hex().unwrap();
for i in 0..l.len() {
l[i] ^= r[i];
}
return l.to_hex();
}

这行得通,但由于 for 循环中的范围,它感觉不到惯用代码。

是否可以压缩 lr 并从 l 中获取对元素的可变引用和对来自 r 的元素?

(注意,我不检查向量的长度。我知道这在现实生活中会爆炸,但我现在想关注 for 循环)

最佳答案

您将使用 .zip() 迭代器适配器,例如:

pub fn xor_in_place(l: &mut [u8], r: &[u8]) {
for (x, y) in l.iter_mut().zip(r) {
*x ^= *y;
}
}

您可以考虑将此 XOR 操作概括为:

  1. 接受所有实现 BitXor 的元素类型。
  2. 接受通用 IntoIterator 参数,而不仅仅是切片。

请注意,只要两个迭代器中较短的一个停止,zip 就会停止。

关于vector - 压缩可变向量迭代器的惯用 Rust 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31042076/

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