Pet*_*mit 2 iterator vector idiomatic mutable rust
我正在尝试使用Rust(以一种惯用的方式)进行Matasano crytpo挑战.
第二个任务是xor两个向量.我现在的代码是:
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();
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,但由于for循环中的范围,它不会感觉到惯用的代码.
是否可以压缩l并r获得对该元素的可变引用以及对该元素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;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以考虑通过任一方式推广此XOR操作
BitXor.IntoIterator参数而不仅仅是切片.请注意,zip只要两个迭代器中的较短者完成,它就会停止.
| 归档时间: |
|
| 查看次数: |
1506 次 |
| 最近记录: |