使用不同顺序的等效数组ruby查找数组中特定字符串的索引

使用不同顺序的等效数组ruby查找数组中特定字符串的索引,ruby,arrays,string,loops,bioinformatics,Ruby,Arrays,String,Loops,Bioinformatics,我有两个数组:fasta_id和frags_by_density。两者都包含同一组≈1300串。 fasta_ID按数字顺序排列,例如:[“frag1”、“frag2”、“frag3”…] frags_by_density包含顺序不同的相同字符串,例如:[“frag14”、“frag1000”…] frag_按密度排序的方式与问题无关(但对于任何生物信息学家来说,“frag”是按snp密度排序的重叠群) 我要做的是在frag_by_density数组中查找索引,它包含fasta_id中的每个字符

我有两个数组:fasta_id和frags_by_density。两者都包含同一组≈1300串。 fasta_ID按数字顺序排列,例如:[“frag1”、“frag2”、“frag3”…] frags_by_density包含顺序不同的相同字符串,例如:[“frag14”、“frag1000”…]

frag_按密度排序的方式与问题无关(但对于任何生物信息学家来说,“frag”是按snp密度排序的重叠群)

我要做的是在frag_by_density数组中查找索引,它包含fasta_id中的每个字符串。我希望最终得到这些位置(索引)的新数组,其顺序与fasta_ids数组相同

例如,如果fasta_id和frags_by_density数组中“frag”字符串的顺序相同,则输出数组将为:[0,1,2,3…]。 在本例中,输出数组(2)的索引2处的值对应于fasta_ID('frag3')的索引2处的值-因此我可以由此推断,'frag3'字符串在frags_中的索引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
x=0#x的值表示密度数组中的位置(索引)
position_each_frag_id_in_d=[]#希望通过密度获取frag_中frag_id中的值的位置
迭代=[]
fasta|u id.每个都有|
如果碎片由密度[x]==i

在非优化版本中定位每个框架id
array.index(x)
返回数组中x的索引,如果找不到则返回nil<代码>压缩
然后从数组中删除nil元素


position_of_frag_id_in_d=frag_id.map{x | frag_by_density.index(x)}.compact

为什么要压缩?当然,如果有任何
nil
元素,那么它们应该留在
frag\u id
中?如果
frag\u by\u density
中没有找到
frag\u中的元素,则其位置为
nil
,因此我将其删除。OP你可以发布一个非平凡的例子,让预期的答案更加清晰。效果完美。是的,压缩是一个不必要但无害的加法,不会有任何nil位置,因为两个数组都包含相同的字符串,所以都可以找到。谢谢你的帮助。