我有两个数组:fasta_ids 和 frags_by_density。两者都包含相同的 ≈1300 个字符串。fasta_ids 是按数字排序的,例如 ['frag1', 'frag2', 'frag3'...] frags_by_density 包含以不同顺序排列的相同字符串,例如 ['frag14', 'frag1000'...]
frag_by_density 的排序方式与问题无关(但对于任何生物信息学家来说,'frags' 是按 snp 密度排序的 contigs)。
我想要做的是在 frag_by_density 数组中找到索引,其中包含 fasta_ids 中的每个字符串。我想得到一个包含这些位置(索引)的新数组,它的顺序与 fasta_ids 数组的顺序相同。
例如,如果“frag”字符串在 fasta_ids 和 frags_by_density 数组中的顺序相同,则输出数组将为:[0, 1, 2, 3...]。在此示例中,输出数组 (2) 的索引 2 处的值对应于 fasta_ids ('frag3') 的索引 2 处的值 - 所以我可以从中推断出 'frag3' 字符串位于 frags_by_density 中的索引 2 .
下面是我提出的代码,目前它陷入了我认为是无限循环的状态。我已经注释了每个部分应该做什么:
x = 0 #the value of x will represent the position (index) in the density array
position_each_frag_id_in_d = [] #want to get positions of the values in frag_ids in frags_by_density
iteration = []
fasta_ids.each do |i|
if frags_by_density[x] == i
position_each_frag_id_in_d << x #if the value at position x matches the value at i, add it to the new array
iteration << i
else
until frags_by_density[x] == i #otherwise increment x until they do match, and add the position
x +=1
end
position_each_frag_id_in_d << x
iteration << i
end
x = iteration.length # x should be incremented, however I cannot simply do: x += 1, as x may have been incremented by the until loop
end
puts position_each_frag_id_in_d
这是一个相当复杂的问题。希望有一个更简单的解决方案,或者至少有人可以修改我已经开始的内容。
更新:重命名数组 fasta_ids,因为它在代码中(如果有任何混淆,抱歉)fasta_id = frag_id