我目前正在尝试找到一种方法来实现一个小的生物信息库,以用于DNA序列的操作。这些表示为仅包含字符A,C,G和T的字符串。如何使此方法采用以下参数?
我需要使它加入这些序列,并将每个序列放入自己的数组中。
到目前为止,我已经创建了两个方法:Main()和Kmers()。我这样做了,所以Kmer方法会将一个字符串(例如“ AGATCGAGTG”)分解为3个字符,例如:
AGAGATATCTCGCGAGAGAGATGTGTG
然后,我的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
答案 0 :(得分:3)
x
必须是string
而不是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
GAC,ACG,CGA,GAT
ACG,CGA,GAT,ATC,TCA,CAT,ATA
答案 1 :(得分:1)
这是一个解决方案:
string input = "AGATCGAGTG";
int k = 3;
var result = Enumerable.Range(0, input.Length - k + 1).Select(x => input.Substring(x, k));
输出结果:
AGA
GAT
ATC
TCG
CGA
GAG
AGT
GTG
如果要使用逗号联接:请使用“,”进行联接
string r = string.Join(",", result);
答案 2 :(得分:0)
使用LINQ
IEnumerable<string> Substrings(string str, int size)
{
return Enumerable.Range(0, str.Length - size + 1)
.Select(i => str.Substring(i, size));
}
Console.Write(string.Join(",", Substrings("GCATACGAT", 3).ToList()));
输出
GCA,CAT,ATA,TAC,ACG,CGA,GAT