Ich versuche, basierend auf einem Prädikat einige Elemente aus einem Vektor zu entfernen und das Ergebnis zu sammeln. Hier ist ein (nicht funktionierendes) Beispiel mit einem erwarteten Ergebnis:
%Vor%Dies führt zu dem Fehler
%Vor%Es gibt mehrere Alternativen, die ich angeschaut habe, keiner von ihnen scheint zu tun, was ich will:
Vec::retain
entfernt die Elemente aus dem Vektor, gibt aber nicht das Eigentum an den entfernten Elementen zurück.
v.drain(..).filter(condition).collect()
gibt den korrekten Wert für drained
zurück, leert jedoch den gesamten Vektor.
Nicht im stabilen Rust 1.20.0. Es gibt ein instabiles nächtliches Feature namens drain_filter
, das genau das tut, was du willst:
Als stabile Problemumgehung können Sie möglicherweise Iterator::partition
verwenden, den Arbeitsspeicher jedoch nicht erneut verwenden: