c# - Kmers - 如何加入序列并将子字符串放入数组
问题描述
我目前正在尝试找到一种方法来实现一个小型生物信息学库,用于处理 DNA 序列。这些被表示为仅由字符 A、C、G 和 T 组成的字符串。如何使此方法采用以下参数?
- 指定 K 的整数
- 任意数量的 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
解决方案
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
推荐阅读
- xml - XSL 提取 epub 元数据
- reactjs - React Typescript:将值从孩子传递给父母
- javascript - 通过ajax成功在动态克隆选择选项中填充数据
- css - 固定底部时如何滚动整个内容
- java - 如何将包含 1000 万条记录的巨大结果集转换为 java 中的列表?
- routing - 在拥抱服务器中像字符串一样传递路径
- content-management-system - 内容管理系统 (CMS) 和内容交付网络 (CDN) 之间的区别?
- c# - Dotnet Core 3.1 Entity Framework - entity.SetTableName 的问题当前不可用
- r - 如何在 R 中概括很多分类变量?
- javascript - 获取 MS Word 插件 Javascript API 中的列表样式类型