You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何将元组构成的vector拆分为两个独立列表?

实现方案

Rust 标准库的迭代器直接提供了unzip()方法,专门用于拆分元素为二元组的迭代器,是该场景下的最优解。

方法1:直接使用unzip(消耗原vector所有权)

let v = vec![(1, 1), (1, 1), (1, 3), (1, 4), (2, 2), (2, 4), (2, 6)];
let (l1, l2): (Vec<i32>, Vec<i32>) = v.into_iter().unzip();

执行后l1和l2就是你需要的两个独立列表。

方法2:保留原vector所有权

如果你后续还需要使用原vector,可以先通过迭代器拷贝元素再拆分:

let v = vec![(1, 1), (1, 1), (1, 3), (1, 4), (2, 2), (2, 4), (2, 6)];
// 元素实现Copy trait时可以用cloned()
let (l1, l2): (Vec<i32>, Vec<i32>) = v.iter().cloned().unzip();

// 通用写法,不依赖Copy trait
// let (l1, l2): (Vec<i32>, Vec<i32>) = v.iter().map(|(a, b)| (*a, *b)).unzip();

方法3:手动遍历(适合自定义逻辑场景)

如果你需要在拆分过程中添加额外处理逻辑,可以手动遍历:

let v = vec![(1, 1), (1, 1), (1, 3), (1, 4), (2, 2), (2, 4), (2, 6)];
// 提前分配容量,避免动态扩容提升性能
let mut l1 = Vec::with_capacity(v.len());
let mut l2 = Vec::with_capacity(v.len());

for (a, b) in v {
    l1.push(a);
    l2.push(b);
}

内容的提问来源于stack exchange,提问作者Ziva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:09:02