3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RustのIterator: anyとfindの違い

Last updated at Posted at 2023-11-06

RustのIteratorトレイトは、コレクションの要素を検査するための強力なメソッドを提供しています。その中でもよく使われるのがanyメソッドとfindメソッドですが、これら二つのメソッドは異なる目的で使用されます。

anyメソッド

anyメソッドは、イテレータを介してコレクションの各要素に対して指定した条件をテストします。もし条件を満たす要素が一つでもあれば、trueを返し、そうでなければfalseを返します。このメソッドは、特定の条件を満たす要素がコレクションに存在するかどうかを確認する際に便利です。

例:

let numbers = vec![1, 2, 3, 4, 5];
let has_even = numbers.iter().any(|&x| x % 2 == 0); // 偶数が含まれているため、trueを返す

findメソッド

一方で、findメソッドは、イテレータの各要素に対して指定した条件をテストし、条件を満たす最初の要素をSomeでラップして返します。条件を満たす要素が一つもなければNoneを返します。findは、条件に合致する具体的な要素を見つけ出す必要があるときに使用されます。

例:

Copy code
let numbers = vec![1, 2, 3, 4, 5];
let first_even = numbers.iter().find(|&&x| x % 2 == 0); // Some(&2)を返す。2が最初の偶数のため。

要約

anyはブール値を返し、条件を満たす要素の存在をチェックします。
findはオプション値を返し、条件に合致する最初の要素そのものを見つけます。

どちらのメソッドもイテレータを消費しますが、条件を満たす要素が見つかった時点でイテレーションを停止するという短絡評価の性質があります。これにより、パフォーマンスを向上させることができます。

参考記事

Iterator::any
Searching through iterators

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?