Löschen Während der Iteration in Ruby?

Ich bin der Iteration über eine sehr große Menge von strings, die wiederholt über einen kleineren Satz von Zeichenketten. Aufgrund der Größe, diese Methode dauert eine Weile zu tun, so dass es zu beschleunigen, ich bin versucht, löschen Sie die Zeichenfolgen aus die kleinere Gruppe, die nicht mehr verwendet werden muss, wie es entlang geht. Unten ist mein Aktueller code:

    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

Das problem, das ich konfrontiert ist, dass der einfache Weg, array.delete(string) effektiv fügt eine break-Anweisung, um die innere Schleife, die vermasselt die Ergebnisse. Der einzige Weg, ich weiß, wie dieses Problem zu beheben ist, dies zu tun:

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

Fühlt sich irgendwie schlampig zu mir. Gibt es einen besseren Weg, dies zu tun?

einfacher Weg, das zu tun, was? was wollen Sie erreichen?
bitte können Sie nicht akzeptieren, Ihre eigene Antwort unten? Es ist eindeutig nicht die beste

InformationsquelleAutor Jesse Jashinsky | 2010-05-29

Schreibe einen Kommentar