gpt4 book ai didi

ruby - 在 Ruby 中迭代时删除?

转载 作者:数据小太阳 更新时间:2023-10-29 06:37:22 25 4
gpt4 key购买 nike

我正在遍历一组非常大的字符串,而这些字符串又遍历了一组较小的字符串。由于大小,此方法需要一段时间才能完成,因此为了加快速度,我试图从较小的集合中删除不再需要使用的字符串。以下是我当前的代码:

    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

关于ruby - 在 Ruby 中迭代时删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2933366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com