如何推广硬编码循环
本文关键字:循环 编码 何推广 | 更新日期: 2023-09-27 18:30:01
嗨,我很难概括这个硬编码的循环。我有一个列表,其中包含肽MW的密码子(字符串:AUG,CAG等)。M有密码子AUG,W有密码子UUG。
该代码的目的是按照MW:AGUUG的顺序组合密码子硬编码的循环使它正确。在这里,我知道给定肽中的氨基酸数量(2M和W),我想推广到任何长度的肽MWMRS。。。。。特别是我有
aminoAcidCodons:{ Mcodons[AUG],Wcodons[UGG]}
for (int h = 0; h < aminoAcidCodons[0].Multiplicity; h++)
{
stbld = new StringBuilder();
stbld.Append(aminoAcidCodons[0].Codons[h]);
codonsList0.Add(stbld.ToString());
stbld.Clear();
for (int j = 0; j < aminoAcidCodons[1].Multiplicity; j++)
{
stbld.Append(codonsList0[h]);
codon = aminoAcidCodons[1].Codons[j];
stbld.Append(codon);
codonsList1.Add(stbld.ToString());
stbld.Clear();
}
}
我试过这个广义循环
for (int h = 0; h < aminoAcidCodons.Count ; h++)
{
stbld = new StringBuilder();
stbld.Append(aminoAcidCodons[h].Codons[0]);
codonsList1.Add(stbld.ToString());
stbld.Clear();
for (int j = 0; j < aminoAcidCodons[h].Multiplicity; j++)
{
// stbld = new StringBuilder();
// stbld.Append(aminoAcidCodons[h].Codons[0]);
// codonsList0.Add(stbld.ToString());
stbld.Append(codonsList1[h]);
codon = aminoAcidCodons[h].Codons[j];
stbld.Append(codon);
codonsList1.Add(stbld.ToString());
stbld.Clear();
}
}
目前,您想在这里做什么有点令人困惑,但我会尝试一下。
首先,你真的在滥用StringBuilder
。在这种情况下,你的代码没有必要,你只是让事情变得比必要的更复杂。
这是您的第一个没有StringBuilder
:的代码示例
for (int h = 0; h < aminoAcidCodons[0].Multiplicity; h++)
{
codonsList0.Add(aminoAcidCodons[0].Codons[h]);
for (int j = 0; j < aminoAcidCodons[1].Multiplicity; j++)
{
codonsList1.Add(
aminoAcidCodons[0].Codons[h]
+ aminoAcidCodons[1].Codons[j]);
}
}
简单多了!
现在是通用版本:
private IEnumerable<string> CombineCodons(
AminoAcidCodon[] aminoAcidCodons,
int index)
{
for (int h = 0; h < aminoAcidCodons[index].Multiplicity; h++)
{
yield return aminoAcidCodons[index].Codons[h];
if (index + 1 < aminoAcidCodons.Length)
{
foreach (var child in CombineCodons(aminoAcidCodons, index + 1))
{
yield return aminoAcidCodons[index].Codons[h] + child;
}
}
}
}
就像我说的,我不确定你到底想做什么,但我认为这很接近。
这样说吧:
codonsList1.AddRange(CombineCodons(aminoAcidCodons, 0));