Как проверить, есть ли вещь в векторе - PullRequest
1 голос
/ 14 октября 2019

Как мне проверить, есть ли вещь в векторе?

let n= vec!["-i","mmmm"];
if "-i" in n { 
    println!("yes");
} else {
    println!("no");

Я предполагаю, что мне нужно поместить это в цикл, а затем сделать if "-i" in x, где x это итерациявар. Но я прыгал, есть доступный удобный метод, или я перепутал синтаксис, и есть подобный способ сделать это.

Ответы [ 2 ]

5 голосов
/ 14 октября 2019

Существует метод contains (https://doc.rust -lang.org / std / vec / struct.Vec.html # method.contains ) для Vec.

Пример:

let n = vec!["-i","mmmm"];

if n.contains(&"-i") { 
    println!("yes");
} else {
    println!("no");
}

Это несколько ограничительный , например, он не позволяет проверить, содержит ли Vec<String> x, если x имеет тип &str. В этом случае вам нужно будет использовать метод .iter().any(...), описанный @ damaic

4 голосов
/ 14 октября 2019

Несмотря на то, что вы могли бы создать цикл, более простым способом было бы использовать метод any на итераторе для вашего вектора.

any принимает замыкание, которое возвращает trueили ложьЗакрытие вызывается для каждого из элементов по очереди, пока не найдет тот, который возвращает true. Обратите внимание, что итератор возвращает ссылки на значения (таким образом, & в |&i|).

let n= vec!["-i","mmmm"];

if n.iter().any(|&i| i=="-i") {
    println!("Yes");
}

Поскольку any работает на итераторах, его можно использовать с любым типом контейнера. На итераторах доступно большое количество похожих методов, таких как all, find и т. Д. См. Документацию стандартной библиотеки для Iterators.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...