gpt4 book ai didi

rust - 收集到矩阵中的清洁方式

转载 作者:行者123 更新时间:2023-12-05 01:03:44 25 4
gpt4 key购买 nike

我想拆分收集这个形状奇特的向量

let v = vec![
0, 1, 2, 3,
4, 5, 6, 7,

8, 9,
10, 11,
12, 13,
];

进入这两个矩阵:

let v1 = vec![
vec![0, 1, 2, 3],
vec![4, 5, 6, 7],
];

let v2 = vec![
vec![8, 9],
vec![10, 11],
vec![12, 13],
];

(元素是连续的(即 1, 2, 3, ...)但这只是一个例子。此外,虽然这里的矩阵数量是两个,但这个数字只是一个例子;有时它应该是三个或更多。)

微不足道是可能的(Rust Playground):

let mut v1: Vec<Vec<usize>> = vec![];
for i in 0..2 {
v1.push(v.iter().skip(i * 4).take(4).copied().collect());
}

let mut v2: Vec<Vec<usize>> = vec![];
for i in 0..3 {
v2.push(v.iter().skip(8 + i * 2).take(2).copied().collect());
}

但是,有没有更清洁的方法?这是我想要的伪代码:

let v1 = v.iter().every(4).take(2).collect();
let v2 = v.iter().skip(8).every(2).take(3).collect();

最佳答案

您可以将初始向量分成两个切片并分别迭代每个切片 (playground):

let (left, right) = v.split_at(8);

let v1 = left.chunks(4).map(|s| s.to_vec()).collect::<Vec<_>>();
let v2 = right.chunks(2).map(|s| s.to_vec()).collect::<Vec<_>>();

关于rust - 收集到矩阵中的清洁方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73669468/

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