【发布时间】:2021-08-24 13:52:59
【问题描述】:
我正在尝试找到一种方法来检查我是否在 for 循环中的迭代器的最后一个元素上,而不使用 .clone();目前我正在这样做:
let sentence = "The quick brown fox.";
let words = sentence.split(' ');
let last = words.clone().last().unwrap();
for word in words {
if word == last {
print!("{}", word);
}
}
我也尝试在迭代器上使用 .collect() ,但这需要我使用 .iter().enumerate() 来检查最后一个索引,这对我来说似乎不必要地复杂:
let sentence = "The quick brown fox.";
let words: Vec<&str> = sentence.split(' ').collect();
for (i, word) in words.iter().enumerate() {
if i == words.len() - 1 {
print!("{}", word);
}
}
有没有办法以更简洁的方式做到这一点,也许只使用原始迭代器?
【问题讨论】:
-
BTW 使用
enumerate在您需要索引时非常合适。没有理由避免它。 -
@DenysSéguret 这对我来说似乎是多余的,我必须将迭代器转换为向量,然后再次将其转换回迭代器以获取索引
-
转换为 vec 是一个合法的问题,是的。在最后一个迭代器项目的一般情况下,您可以在下面找到 Masklinn 的答案,它优雅地缓冲下一个元素。在你的确切情况下,你有我的更简单,更有效。但在真正需要索引的一般情况下,请使用
enumerate。
标签: rust