<!--
title: optimize collection iterations
domain: app-frameworks
topic: Algorithms
language: Ruby
source: mastodon/mastodon
updated: 2025-05-03
url: https://awesomereviewers.com/reviewers/mastodon-optimize-collection-iterations/
-->

Avoid multiple passes through the same data structure when a single iteration can accomplish the same work. This reduces computational complexity and improves performance, especially for large datasets.

Instead of using multiple array traversals like `filter_map` chains:

```ruby
# Inefficient: multiple traversals
params = uris.filter_map { |uri| uri_to_local_account_params(uri) }
usernames = params.filter_map { |param, value| value.downcase if param == :username }
ids = params.filter_map { |param, value| value if param == :id }
```

Use a single iteration to collect all needed data:

```ruby
# Efficient: single traversal
usernames = []
ids = []

uris.each do |uri|
  param, value = uri_to_local_account_params(uri)
  usernames << value.downcase if param == :username
  ids << value if param == :id
end
```

This principle also applies to avoiding duplicate iteration logic in collection processing services and preventing redundant recursive operations by checking if work has already been completed before proceeding.
