İçeriğe geç

Verimsiz Üyelik Testi (ARCH6075)

Anahtar ruby.performance.inefficient-membership-test · Önem warning · Kategori performance

Bir dizi üzerinde include? ile üyelik kontrolü O(n)’dir; döngüde tekrarlandığında O(n*m) maliyete dönüşür. Bir Set kullanarak araması O(1) yapın.

def allowed(ids, blocked)
ids.select { |id| !blocked.include?(id) }
end
require "set"
def allowed(ids, blocked)
blocked_set = blocked.to_set
ids.select { |id| !blocked_set.include?(id) }
end

Tekrarlanan üyelik kontrolleri için diziyi bir Set’e dönüştürün ve O(1) aramadan yararlanın.