ruby - 루비에서 반복하는 동안 삭제 하시겠습니까?



loops (2)

'arr.shift'를 사용하십시오.

a=[1,2,3,4]
while(a.length!=0)
  print a
  a.shift
  print "\n"
end

산출:

[1, 2, 3, 4]
[2, 3, 4]
[3,4]
[4]

더 큰 문자열 집합을 반복하는 매우 큰 문자열 집합을 반복합니다. 크기 때문에이 메서드는 시간이 오래 걸리므로 속도를 높이기 위해 더 이상 사용하지 않아도되는 더 작은 집합에서 문자열을 삭제하려고합니다. 아래는 현재 코드입니다.

    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

내가 직면 한 문제는 쉬운 방법 인 array.delete(string) 이 결과를 엉망으로 만드는 내부 루프에 break 문을 효과적으로 추가한다는 것이다. 이 문제를 해결하는 방법을 알고있는 유일한 방법은 다음과 같습니다.

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

이것은 나에게 조잡하게 느껴진다. 이 작업을 수행하는 더 좋은 방법이 있습니까?


delete_if 사용

array.delete_if do |v|
    if v.should_be_deleted?
        true
    else
        v.update
        false
    end
end




loops