【发布时间】:2022-01-12 13:34:27
【问题描述】:
我有一个Vec<(String, i64)>,需要遍历Strings 并移动它们,然后遍历i64s。
但是,如果我移动 Strings,我必须将 i64 再次存储到另一个 Vec:
let l: Vec<_> = l
.into_iter()
.map(|(string, int)| {
drop(string);
int
})
.collect();
for i in l {
process(i);
}
如何在不产生任何额外性能开销的情况下分别迭代 Strings 和 i64s。
目前我能想到的唯一不会导致额外操作的解决方案是将Strings 和i64s 分开存储。
【问题讨论】:
-
你可以克隆你需要的东西。或者解压
Vec<(s, int)> -
过早优化是万恶之源
-
惯用的方式是
unzip()。
标签: rust move move-semantics