Eu tenho src: Vec<Foo>
e dst: &mut [Foo]
. Quero mover o máximo de elementos possível de src
para dst
. Especificamente:
- Se
src
for menor quedst
, então o início dedst
deve ser substituído pelo que estava emsrc
(deixando o restodst
como está) esrc
deve terminar vazio. - Se
src
edst
tiverem o mesmo comprimento, todos os valores emdst
devem ser substituídos pelo que estava emsrc
esrc
devem ficar vazios. - Se
src
for maior quedst
, todos os valores emdst
devem ser substituídos pelo que estava no início desrc
, esrc
devem ser deixados apenas os elementos que não couberam.
Por exemplo, fingir Foo
era i32
(mas também deve funcionar para não- Copy
tipos):
- Se
src
começa como[1,2]
edst
começa como[7,8,9,10]
,src
deve terminar como[]
edst
deve terminar como[1,2,9,10]
. - Se
src
começa como[1,2,3,4]
edst
começa como[7,8,9,10]
,src
deve terminar como[]
edst
deve terminar como[1,2,3,4]
. - Se
src
começa como[1,2,3,4,5,6]
edst
começa como[7,8,9,10]
,src
deve terminar como[5,6]
edst
deve terminar como[1,2,3,4]
.
Eu sei que poderia fazer um loop manualmente e mover um elemento de cada vez, mas parece que deveria haver uma Drain
abordagem do tipo -like.
Isso é fácil de fazer, basta descobrir quantos elementos você pode mover (que é o mínimo de ambos os comprimentos) e então usar
drain
para remover esses elementos e colocá-los no destino.( Parque infantil )