about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libcore/iter/mod.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs
index 443b1567e1b..33c00989fd2 100644
--- a/src/libcore/iter/mod.rs
+++ b/src/libcore/iter/mod.rs
@@ -698,13 +698,16 @@ impl<I> Iterator for StepBy<I> where I: Iterator {
     #[inline]
     fn nth(&mut self, mut n: usize) -> Option<Self::Item> {
         if self.first_take {
+            self.first_take = false;
+            let first = self.iter.next();
             if n == 0 {
-                self.first_take = false;
-                return self.iter.next()
+                return first;
             }
             n -= 1;
         }
-        self.iter.nth(n * self.step)
+        // n and self.step are indices, thus we need to add 1 before multiplying.
+        // After that we need to subtract 1 from the result to convert it back to an index.
+        self.iter.nth((n + 1) * (self.step + 1) - 1)
     }
 }