Skip to content

Combine Collection Predicates (ARCH6077)

Key ruby.performance.combine-collection-predicates · Severity info · Category performance

Consecutive select calls or count > 0 for an emptiness check walk the collection multiple times. Fuse the predicates into a single pass.

def has_recent_admin?(users)
users.select(&:admin?)
.select(&:recent?)
.count > 0
end
def has_recent_admin?(users)
users.any? { |u| u.admin? && u.recent? }
end

Combine adjacent filters into one predicate and use any? instead of count > 0 for emptiness.