使用不同顺序的等效数组ruby查找数组中特定字符串的索引
我有两个数组: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处 下面是我提出的代码,目前它被困在我认为是一个无限循环中。我已经说明了每个部分应该做什么:使用不同顺序的等效数组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中的每个字符
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
在非优化版本中定位每个框架idarray.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位置,因为两个数组都包含相同的字符串,所以都可以找到。谢谢你的帮助。