首页 > 解决方案 > Kmers - 如何加入序列并将子字符串放入数组

问题描述

我目前正在尝试找到一种方法来实现一个小型生物信息学库,用于处理 DNA 序列。这些被表示为仅由字符 A、C、G 和 T 组成的字符串。如何使此方法采用以下参数?

  1. 指定 K 的整数
  2. 任意数量的 DNA 序列,每个序列都作为单独的参数提供

我需要让它加入这些序列并将每个序列放入自己的数组中。

到目前为止,我已经创建了两种方法:Main() 和 Kmers()。我已经做到了,因此 Kmer 方法会将诸如“AGATCGAGTG”之类的字符串分解为 3-mers,例如:

AGAGATATCTCGCGAGAGAGTGTG

然后我的 Main() 方法打印这些值:

using System;

class Sequence
{

    public static void Main(string[] args)
    {
        foreach (string kmerArray in Kmers(3, "GCATACGAT"))
        {
            Console.Write(kmerArray);
        }
        Console.ReadLine();
    }

    public static Array Kmers(int k, params string[] x)
    {
        int ArraySize = x.Length;
        string[] kmer = new string[ArraySize];

        for (int i = 0; i < ArraySize - k + 1; i++)
        {
            if (i <= ArraySize)
            {
                kmer[i] = x.Substring(i, k);
            }
        }

        return kmer;
    }
}

我的输出应该是这样的:

AGA,GAT,ATC,TCG,CGA,GAG,AGT,GTG

标签: c#

解决方案


x必须是 astring而不是string[]

public static IEnumerable<string> Kmers(int k, string x)
{
    for (int i = 0; i < x.Length - k + 1; i++)
        yield return x.Substring(i, k);
}

string[] result = Kmers(3, "GCATACGAT").ToArray(); 

如果您需要逗号分隔的字符串:

 string result = string.Join(",", Kmers(3, "GCATACGAT"));

只需使用System命名空间即可:

public static string[] Kmers(int k, string x)
{
    string[] result = new string[x.Length - k + 1];
    for (int i = 0; i < x.Length - k + 1; i++)
        result[i] = x.Substring(i, k);
    return result;
}

现场演示

"编辑(考虑评论):

如果你期望一个字符串数组作为参数并且应该返回一个数组逗号分隔的字符串,那么Kmers函数应该是这样的:

public static string[] Kmers(int k, string[] x)
{
    string[] result = new string[x.Length];
    for (int j = 0; j < x.Length; j++)
    {
         string[] itemresult = new string[x[j].Length - k + 1];
         for (int i = 0; i < x[j].Length - k + 1; i++)
              itemresult[i] = x[j].Substring(i, k);
         result[j] = string.Join(",", itemresult);
     }
     return result;
}

你也应该传递string[]给它:

string[] input = {"GCATACGAT", "GACGAT", "ACGATCATA"};
string[] result = Kmers(3, input);

foreach (string x in result)
   Console.WriteLine(x);

结果:

GCA,CAT,ATA,TAC,ACG,CGA,GAT

广汽,ACG,CGA,GAT

ACG,CGA,GAT,ATC,TCA,CAT,ATA


推荐阅读