rust - 使用 split_mut 或类似方法对切片的不相交部分进行多个可变引用
问题描述
Rust 的split_mut函数允许您通过谓词分割切片。但是,谓词作用于切片的元素。例子:
let mut v = [10, 40, 30, 20, 60, 50];
for group in v.split_mut(|num| *num % 3 == 0) {
group[0] = 1;
}
assert_eq!(v, [1, 40, 30, 1, 60, 1]);
我可以像这样将一个切片分成相等的部分:
let mut v = [1,2,3,4,5,6,7,8,9];
并得到
&mut[1,2,3]
并且&mut[4,5,6]
和&mut[7,8,9]
在usch中,所有这些可变变量可以同时存在而我没有编译问题吗?我想对切片的不相交部分有多个可变引用,但谓词应该在切片的索引上,而不是在元素上。
解决方案
正如Jmb所建议的那样
您可以使用split_at_mut将可变切片分成 2 个不重叠的可变切片。
fn main() {
let mut v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// Needs to be a multiple of v
let number_of_parts = 5;
let mid = v.len() / number_of_parts;
let mut res = Vec::new();
let mut ret = &mut v[..];
for _ in 0..number_of_parts {
let (head, tail) = ret.split_at_mut(mid);
res.push(head);
ret = tail;
}
println!("Parts: {:?}.", res);
}
正如Õmer Erden所建议的那样
您可以使用chunks_mut迭代可变切片并返回不重叠的可变切片。
fn main() {
let mut v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// Needs to be a multiple of v
let number_of_parts = 5;
let mid = v.len() / number_of_parts;
let mut res = Vec::new();
for chunk in v.chunks_mut(mid) {
res.push(chunk);
}
println!("Parts: {:?}.", res);
}
推荐阅读
- python - CNN模型预测
- git - git show writing 100% but still show fatal: The remote end unexpectedly hang up and RPC failed 错误
- python-3.x - 我的 scrapy 脚本似乎没有调用 parse_item 方法
- ios - UICollectionViewCell,多个单元格大小,设置gradientView宽度未设置为当前单元格大小,滚动时有时会更改
- angular - 为 neo4j 集成自动完成功能
- javascript - 如何找到以数字为底的对数?
- jquery - 节省
- regex - 正则表达式查找#aabbcc 格式的十六进制颜色以将它们缩短为#abc
- ios - 使用解密时,表达式类型不明确,没有更多 AES 上下文
- ios - Navigation controller how to pop entire stack, including root