2015-09-30 13 views
6

Hat die Rust-Sprache eine Möglichkeit, eine Funktion auf jedes Element in einem Array/Vektor anzuwenden. Ich weiß in Python gibt es die map() Funktion, die diese Aufgabe erfüllt. In R gibt es die , tapply() und apply() Funktionen, die dies auch tun. Ich habe mich gefragt, ob es eine etablierte Möglichkeit gibt, eine Funktion in Rust zu vektorisieren?Hat Rust eine Möglichkeit, eine Funktion/Methode auf jedes Element in einem Array oder Vektor anzuwenden?

+1

Hier gehts: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map Sie können es verwenden wie: 'vec! [1, 2, 3] .into_iter() .map (| x | x * 2) .collect :: >() ' – Adrian

Antwort

12

Es gibt ein paar Feinheiten hier:

Wir Karte haben, die auf Iteratoren arbeitet. So können Sie:

some_vec.iter().map(|x| { }) 

Allerdings sind Iteratoren faul, so dass dies nichts tun wird. Sie können ein .collect() an das Ende heften, um einen neuen Vektor mit den neuen Elementen zu erstellen, wenn Sie das möchten.

Der üblicher Weg etwas ohne Zuweisung zu tun ist, ein for-Schleife zu verwenden:

for i in &vec { 

Wenn Sie wirklich den funktionalen Stil wollen, können Sie die forall-Methode in der itertools Kiste verwenden können.

+0

Sag Steve, ich frage mich nur, ob es einen Leistungsunterschied zwischen der Iterator/Collect-Methode und der' for'-Schleife gibt. Ich weiß in Python, dass es einen wichtigen Leistungsunterschied zwischen Loops, List Comprehensions und der Funktion 'map()' gibt. Gibt es für Rust irgendwelche Leistungsrichtlinien für solche Probleme - hauptsächlich numerische Berechnungen? – krishnab

+1

for Schleifen sind Zucker für Iteratoren in Rust: http://doc.rust-lang.org/stable/std/iter/index.html#rust%27s-for-loop so sollte nicht :) –

Verwandte Themen