edgarmtze
edgarmtze

Reputation: 25038

How to sort list<string> in custom order

Having a string like "CAATCCAAC" I am generating all kmers from it (k is variable but has to be less than string) doing:

        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);
        }

I want to sort result

 AATCC
 ATCCA
 CAATC
 CCAAC
 TCCAA

However I am getting

CAATC
AATCC
ATCCA
TCCAA
CCAAC

How can I sort elements so they are ordered first by 'A' then by 'C' then by 'G' and finally 'T' ?

I tried

var sortedList = kmerList.OrderBy(i =>'A').
                            ThenBy(i => 'C').
                            ThenBy(i => 'G').
                            ThenBy(i => 'T').ToList();

but that wouldn't work

I want the result like to be aplied for all string like

AAAA
AACG
ACCC
ACCG
ACCT
...

TTTT

Upvotes: 1

Views: 138

Answers (3)

Omer Eldan
Omer Eldan

Reputation: 1767

In order to sort a list in an alphabetical order,you should use the built-in Sort function:

kmerList.Sort();

Upvotes: 4

Patrick Y
Patrick Y

Reputation: 853

There's a build-in sort function. Try kmerList.Sort()

Upvotes: 1

gunr2171
gunr2171

Reputation: 17447

If you want to order in alphabetical order you can use:

List<string> sorted = kmerList.OrderBy(x => x).ToList();

To get the reverse:

List<string> sorted = kmerList.OrderByDescending(x => x).ToList();

Upvotes: 1

Related Questions