拥有像“CAATCCAAC”这样的字符串我从中生成所有kmers(k是变量但必须小于字符串):
string dna = "CAATCCAAC";
dna = dna.Replace("\n", "");
int k = 5;
List<string> kmerList = new List<string>();
var r = new Regex(@"(.{" + k + @"})");
while (dna.Length >= k)
{
Match m = r.Match(dna);
//Console.WriteLine(m.ToString());
kmerList.Add(m.ToString());
dna = dna.Substring(1);
}
var sortedList = kmerList.OrderBy(i =>'A').
ThenBy(i => 'C').
ThenBy(i => 'G').
ThenBy(i => 'T').ToList();
foreach (string result in sortedList)
{
Console.WriteLine(result);
}
我想对结果进行排序
AATCC
ATCCA
CAATC
CCAAC
TCCAA
但是我得到了
CAATC
AATCC
ATCCA
TCCAA
CCAAC
我如何对元素进行排序,使它们首先按'A'然后按'C'然后按'G'然后再按'T'排序?
我试过
var sortedList = kmerList.OrderBy(i =>'A').
ThenBy(i => 'C').
ThenBy(i => 'G').
ThenBy(i => 'T').ToList();
但这不起作用
我希望结果像所有字符串一样适用于
AAAA
AACG
ACCC
ACCG
ACCT
...
TTTT
答案 0 :(得分:4)
为了按字母顺序对列表进行排序,您应该使用内置的排序功能:
kmerList.Sort();
答案 1 :(得分:1)
有一个内置排序功能。试试kmerList.Sort()
答案 2 :(得分:1)
如果您想按字母顺序排序,可以使用:
List<string> sorted = kmerList.OrderBy(x => x).ToList();
反过来说:
List<string> sorted = kmerList.OrderByDescending(x => x).ToList();