2015-09-30 10 views
6

La lingua di Rust ha un modo per applicare una funzione a ciascun elemento di un array/vettore. So che in Python c'è la funzione map() che esegue questa attività. In R ci sono le funzioni lapply(), tapply() e apply() che fanno anche questo. Mi stavo chiedendo se esistesse un modo consolidato per vettorizzare una funzione in Rust?Rust ha un modo per applicare una funzione/metodo a ciascun elemento di un vettore o di una matrice?

+1

Qui vai: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map Puoi usarlo come: 'vec! [1, 2, 3] .into_iter() .map (| x | x * 2) .collect :: >() ' – Adrian

risposta

12

Ci sono alcune sottigliezze qui:

Abbiamo mappa, che lavora su iteratori. Quindi puoi:

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

Tuttavia, gli iteratori sono pigri, quindi questo non farà nulla. Puoi virare un .collect() alla fine per creare un nuovo vettore con i nuovi elementi, se è quello che vuoi.

Il modo standard di fare qualcosa senza allocare è quello di utilizzare un ciclo for:

for i in &vec { 

Se davvero si vuole lo stile funzionale, è possibile utilizzare il metodo forall nel itertools cassa.

+0

Say Steve, mi sto chiedendo se c'è una differenza di prestazioni tra l'approccio iterator/collect rispetto al ciclo' for'. Conosco in Python un'importante differenza di prestazioni tra i loop, le list comprehensions e la funzione 'map()'. Ci sono delle linee guida di performance per Rust su problemi come questo - per lo più il calcolo numerico? – krishnab

+1

per i loop sono zucchero per gli iteratori in Rust: http://doc.rust-lang.org/stable/std/iter/index.html#rust%27s-for-loop quindi non dovrebbe essere :) –

Problemi correlati