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.
Hatalı
Bölüm başlığı “Hatalı”def allowed(ids, blocked) ids.select { |id| !blocked.include?(id) }endrequire "set"
def allowed(ids, blocked) blocked_set = blocked.to_set ids.select { |id| !blocked_set.include?(id) }endDüzeltme
Bölüm başlığı “Düzeltme”Tekrarlanan üyelik kontrolleri için diziyi bir Set’e dönüştürün ve O(1) aramadan yararlanın.