我是一个新的 rustacean,所以我的代码质量值得怀疑。在尝试获取生锈的绳索时,我遇到了以下问题。
我有一个位向量 ( bools ),我想将其转换为字节向量 ( u8)
我的第一个实现看起来像这样
let mut res: Vec<u8> = vec![];
let mut curr = 0;
for (idx, &bit) in bits.iter().enumerate() {
let x = (idx % 8) as u8;
if idx % 8 != 0 || idx == 0 {
curr = set_bit_at(curr, (7 - (idx % 8)) as u32, bit).unwrap();
} else {
res.push(curr);
curr = 0
}
}
res.push(curr);
Run Code Online (Sandbox Code Playgroud)
它有效,但感觉很丑陋,所以我尝试使用板条箱 itertools 来实现它。
let res = bits.iter()
.chunks(8)
.map(|split_byte: Vec<u8>| {
split_byte.fold(0, …Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的问题,但它解决了我。
我已经开始从万能的书中学习 Rust 。在迭代器章节(其中链接的章节)中有以下示例
fn iterator_demonstration() {
let v1 = vec![1, 2, 3];
let mut v1_iter = v1.iter();
assert_eq!(v1_iter.next(), Some(&1));
assert_eq!(v1_iter.next(), Some(&2));
assert_eq!(v1_iter.next(), Some(&3));
assert_eq!(v1_iter.next(), None);
}
Run Code Online (Sandbox Code Playgroud)
这本书有点上釉,但我想知道 - 为什么需要&符号?
编辑:只是为了澄清 - 我确实理解iter通过不可变引用进行迭代。我只是不太明白引用数字文字(再次,菜鸟问题。)
rust ×2