如何按自定义顺序</>>对列表<string>进行排序

时间:2013-12-06 17:52:18

标签: c# list sorting

拥有像“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

3 个答案:

答案 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();