创建一系列字符串数组,其中包含一系列数组元素的所有可能组合

时间:2014-11-10 17:41:50

标签: ruby arrays algorithm bioinformatics

我想使用BioRuby进行反向DNA翻译,这为细菌提供了一个很好的CODON表。

这里有一段代码片段,描述了我拥有的一系列数组(它们还有更多!)。

# Arrays Sample
a = table.revtrans("A") # ["gct", "gcc"]
b = table.revtrans("M") # ["atg"]
c = table.revtrans("L") # ["tta", "ttg", "ctt", "ctc", "cta", "ctg"]
d = ...

我想创建一个包含上述字符串的所有可能组合的数组或散列。

["gctatgtta", "gccatgtta", "gtcatgttg", "gctatgctt", etc]

任何想法如何使用Ruby实现这一目标?我尝试使用combination方法,但未能产生任何明智的结果。另外,如果可能的话,我希望能够预先确定计算次数!如果可以,请提供一些数学解释!

一些解释

这些3个字母的字符串是 DNA密码子。每个三元组都可以从预定的amino acid转换为table。我正在做的主要是创造一系列(巨大的)潜在DNA序列,从理论上可以从中产生蛋白质。

谢谢!

2 个答案:

答案 0 :(得分:4)

您要使用的是product

  

返回所有数组中所有元素组合的数组。

     

返回数组的长度是self长度的乘积   和参数数组。

%w(gct gcc).product(%w(atg), %w(tta ttg)).map(&:join)

# => ["gctatgtta", "gctatgttg", "gccatgtta", "gccatgttg"]

答案 1 :(得分:1)

[*a, *b, *c].combination(3).map &:join #=> ["gctgccatg", "gctgcctta", #...