我有一个如下所示的函数:
fn set_many(&mut self, key_vals: impl IntoIterator<Item = (Index, T)>)
{
let (keys, vals): (Vec<_>, Vec<_>) = key_vals.into_iter().unzip();
let mut viter = vals.into_iter();
let mut iter_mut = self.many_iter_mut(keys);
while let Some(mut setter) = iter_mut.next() {
setter.set(viter.next().unwrap())
}
}
fn main() {
let mut v = SimpleVec(vec![100, 200, 300, 400, 500]);
v.set_many([(1, 20), (2, 30), (4, 50)]);
println!("modified vec: {:?}", v);
}
输出:
modified vec: SimpleVec([100, 20, 30, 400, 50])
这是可行的,但有必要呼叫unzip()
,它将密钥和值收集到单独的VEC中.对于大型集合,这是不可取的.
更改函数签名并接受单独的密钥和Val ITER参数是可行的.不幸的是,该函数是公共API的一部分,并且已经在使用中,所以我不希望在下游造成不必要的 destruct .
所以我想知道有没有什么方法可以重写这个函数而不收集?
避免unwrap()
美元也是一件好事.
这是一张playground美元的钞票