我需要在字符串向量中找到元素的索引。这是我到目前为止所得到的:
fn main() {
let test: Vec<String> = vec![
"one".to_string(),
"two".to_string(),
"three".to_string(),
"four".to_string(),
];
let index: i32 = test
.iter()
.enumerate()
.find(|&r| r.1.to_string() == "two".to_string())
.unwrap()
.0;
}
它产生一个错误:
error[E0308]: mismatched types
--> src/main.rs:9:22
|
9 | let index: i32 = test
| ______________________^
10 | | .iter()
11 | | .enumerate()
12 | | .find(|&r| r.1.to_string() == "two".to_string())
13 | | .unwrap()
14 | | .0;
| |__________^ expected i32, found usize
我以为是因为
enumerate()
返回了(usize, _)
元组(如果我输入错了,请纠正我),但是我如何在这里将usize
转换为i32
?如果有更好的方法,我欢迎您提出建议。 最佳答案
TLDR 使用带有position
方法(Rust docs shows a good example)的迭代器。
不,这是因为索引是usize
,而不是i32
。实际上,i32
完全不适合此目的;它可能不够大,没有理由对其进行签名。只需使用usize
即可。
其他一些注意事项:调用to_string()
并不是免费的,并且您不需要进行比较;您可以比较字符串切片就好了!
另外,如果您确实想将usize
转换为i32
,则可以使用强制转换:x as i32
进行此操作,尽管这不会在上溢或下溢时产生错误(即结果可能为负)。
正如Mathieu David的回答所指出的那样,在迭代器上有一个 position
方法可以满足您的要求。
关于rust - 如何在数组,向量或切片中找到元素的索引?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30558246/