Ben dizeleri çok büyük bir set, dizeleri küçük bir set üzerinde dolaşır yineleme ediyorum. Boyutu nedeniyle, bu yöntem o birlikte gider olarak artık kullanılması gerekirse daha küçük kümesinden dizeleri silmeye çalışıyorum, bunu hızlandırmak için öylesine yapmak biraz zaman alıyor. Aşağıda benim geçerli kod:yineleme iken Ruby silme?
Ms::Fasta.foreach(@database) do |entry|
all.each do |set|
if entry.header[1..40].include? set[1] + "|"
startVal = entry.sequence.scan_i(set[0])[0]
if startVal != nil
@locations << [set[0], set[1], startVal, startVal + set[1].length]
all.delete(set)
end
end
end
end
Ben karşılaştığımız sorun kolay yolu, array.delete(string)
etkili sonuçlar haberci yukarıya iç döngü, bir break ifadesini ekler olmasıdır. Bunu düzeltmek için bildiğim tek yol bu yapmaktır:
Ms::Fasta.foreach(@database) do |entry|
i = 0
while i < all.length
set = all[i]
if entry.header[1..40].include? set[1] + "|"
startVal = entry.sequence.scan_i(set[0])[0]
if startVal != nil
@locations << [set[0], set[1], startVal, startVal + set[1].length]
all.delete_at(i)
i -= 1
end
end
i += 1
end
end
Bu tür özensiz bana hissediyor. Bunu yapmanın daha iyi bir yolu var mı?
kolay bir yolu? ne elde etmeye çalışıyorsun? – wilhelmtell
Lütfen aşağıda kendi cevabınızı kabul edemez misiniz? Açıkçası en iyisi – WattsInABox