我试着写一个程序来做以下事情:获取给定字符串s
的所有后缀,然后按照字典顺序对这些后缀进行排序。
下面是我代码:
let mut sorted = (0..s.len())
.map(|i| (i, &s[i..s.len()]))
.collect::<Vec<(usize, &str)>>()
.sort_by_key(|k| k.1);
for elem in sorted {
println!("{} {}", elem.0, elem.1);
}
并且rust编译器给出一个错误:
error[E0277]: `()` is not an iterator
--> src/lt05.rs:7:17
|
7 | for elem in sorted {
| ^^^^^^ `()` is not an iterator
|
= help: the trait `Iterator` is not implemented for `()`
= note: required for `()` to implement `IntoIterator`
有人能解释一下这段代码中的错误吗?
1条答案
按热度按时间nwwlzxa71#
Vec::sort_by_key
对一个向量进行排序并返回()
,所以在你的代码中sorted
最终被赋值为()
,这个unit type是你不能迭代的。要解决这个问题,你可以在构造完向量后,将对
sort_by_key
的调用移到一个单独的语句中,然后对排序后的向量进行迭代。见下面的例子。这里是一个Rust Playground。产出