Last active
November 22, 2020 23:39
-
-
Save patshaughnessy/3252e2e718445d991499e5cd08e1949c to your computer and use it in GitHub Desktop.
Rust Vec<String> find example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fn main() { | |
let needle = "list".to_string(); | |
let haystack = ["some".to_string(), "long".to_string(), "list".to_string(), "of".to_string(), "strings".to_string()].to_vec(); | |
if let Some(str) = haystack.iter().find(|&s| *s == needle) { | |
println!("{}", needle); | |
} else { | |
println!("Nothing there..."); | |
} | |
} |
And if you're going to do membership tests often, consider a set rather than a vector.
Thanks all of you for the ideas!
Yup as I learned on StackOverflow, using contains
seems a lot simpler and cleaner in this example. Using into_iter
will also work, but isn't what I need in my app because I don't want to move the data out.
And thanks for the type inference tip - yes much cleaner.
The deeper issue for me is that Rust's &
and &&
syntax can be very confusing, especially with iterators and closures. Will just take some getting used to I suppose :)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
contains
is definitely the idiomatic approach. Also, you can avoid repeating.to_string()
, and you can rely more on type inference: