2013-12-06 2 views
1

Имея строку типа «CAATCCAAC» Я генерируя все kmers от него (к является переменной, но должно быть меньше, чем строка) делает:Как сортировать список <string> в произвольном порядке

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

, но это не будет работать

Я хочу результат нравится быть aplied для всех строки, как

AAAA 
AACG 
ACCC 
ACCG 
ACCT 
... 

TTTT 
+2

Таким образом, с помощью "Custom" для того, вы имеете в виду " Алфавитный порядок? :) –

+0

вам не нужно заказывать персонажем так, просто сравните строки. –

+0

Это кажется мне в алфавитном порядке. Но также вы можете написать свой собственный класс сравнения и использовать его в методе сортировки – Yoghurt

ответ

1

Если вы хотите заказать в алфавитном порядке, вы можете использовать:

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

Чтобы получить обратное:

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

Чтобы отсортировать список в в алфавитном порядке, вы должны использовать встроенную функцию сортировки:

kmerList.Sort(); 
+0

, и если бы он был обратным порядком T-> G-> C-> A? – cMinor

+1

'kmerList.Sort(). Reverse()' –

1

Существует встроенная функция сортировки. Попробуйте kmerList.Sort()

Смежные вопросы