2016-12-11 4 views
5

In Ruby könnte, wenn ich ein Array a = [1, 2, 3, 4, 5] und ich wollte musste die Summe jeden Element mal seinen Index bekomme ich tueGibt es eine Möglichkeit, mit Index in Rust zu falten?

a.each.with_index.inject(0) {|s,(i,j)| s + i*j}  

Gibt es einen idiomatischen Weg, um die gleiche Sache in Rust zu tun? Bisher habe ich

a.into_iter().fold(0, |x, i| x + i) 

Aber das Konto nicht für den Index, und ich kann nicht wirklich einen Weg finden, um es für den Index zu berücksichtigen. Ist das möglich und wenn ja, wie?

Antwort

11

können Sie die Kette mit enumerate:

fn main() { 
    let a = [1, 2, 3, 4, 5]; 
    let b = a.into_iter().enumerate().fold(0, |s, (i, j)| s + i * j); 

    println!("{:?}", b); // Prints 40 
} 
+1

Beautiful! Genau das wollte ich! Vielen Dank. –

+0

Ich bin froh, dass ich helfen konnte! :) –

+0

Wenn ich '.enumerate()' benutze, um mir den Index in einer Falte zu geben, wird es die Argumente nach dem 'acc' und' curr' oder vorher hinzufügen? – duck

Verwandte Themen