nth mutates the iterator, consuming all items up to and including the nth. (that's the only thing it can do, given that an iterator is defined as a type with a function fn next(&mut self) -> Option<Item>).
fn main() {
let f = "first=2".to_string();
let mut kv = f.split("=");
println!("{:?}={:?}", kv.nth(0), kv.nth(0));
}
Some("first")=Some("2")
Many iterators are clonable, in case you need to be able to return to a previous state:
fn main() {
let f = "first=2".to_string();
let mut kv = f.split("=");
println!("{:?}={:?}", kv.clone().nth(0), kv.nth(1));
}