2013-05-16 2 views
1

очень нужна определенная рекомендация по методологии сортировки строк. Возможно, если бы можно было предоставить некоторый образец кода, это было бы большой помощью. Это не домашнее задание. Мне нужен этот метод сортировки для одновременной проверки нескольких имен каналов и подачи канала соответственно на основе результата сортировки/строки.Нужна помощь по простому методу сортировки строк из строкового массива

Во-первых, я хотел бы иметь строковый массив шаблон что-то, как показано ниже:

string[] strList1 = new string[] {"TDC1ABF", "TDC1ABI", "TDC1ABO" }; 

string[] strList2 = new string[] {"TDC2ABF", "TDC2ABI", "TDC2ABO"}; 

string[] strList3 = new string[] {"TDC3ABF", "TDC3ABO","TDC3ABI"}; //2nd and 3rd element are swapped 

Я хотел бы получил строку [] результат, как показано ниже:

//result1 = "TDC1ABF , TDC2ABF, TDC3ABF" 
//result2 = "TDC1ABI , TDC2ABI, TDC3ABI" 
//result3 = "TDC1ABO , TDC2ABO, TDC3ABO" 

Ок, вот моя идея делая сортировку. Во-первых, каждое ключевое слово strList * ABF. Затем поместите все строки с * ABF в массив результатов. Наконец, упорядочьте сортировку, чтобы выравнивать строковый массив в TDC1ABF, TDC2ABF, TDC3ABF соответственно. Сделайте то же самое для другого массива строк внутри цикла.

Итак, моя проблема в том, что .. как искать * ABF внутри строки внутри массива строк?

+0

Являются ли массивы гарантированно иметь столько элементов, сколько есть массивов? – bobbyalex

+0

Число элементов для каждого канала фиксировано. Просто, что расположение элемента внутри массива иногда не должно быть последовательным. И мне также понадобится тип массива для 2D-массива для многоканальной обработки пост-данных. Итак, я решил использовать массив вместо списка, чтобы пропустить List.ToArray() после сортировки имени канала – jhyap

ответ

3
static void Main() 
    { 
     var strList1 = new[] { "TDC1ABF", "TDC1ABI", "TDC1ABO" }; 
     var strList2 = new[] { "TDC2ABF", "TDC2ABI", "TDC2ABO" }; 
     var strList3 = new[] { "TDC3ABF", "TDC3ABO", "TDC3ABI" }; 

     var allItems = strList1.Concat(strList2).Concat(strList3); 

     var abfItems = allItems.Where(item => item.ToUpper().EndsWith("ABF")) 
      .OrderBy(item => item); 
     var abiItems = allItems.Where(item => item.ToUpper().EndsWith("ABI")) 
      .OrderBy(item => item); 
     var aboItems = allItems.Where(item => item.ToUpper().EndsWith("ABO")) 
      .OrderBy(item => item); 
    } 
+0

Ничего себе на меня. Очень приятное решение ... –

1

Если вы сделаете что-то подобное, вы можете сравнить все суммы и упорядочить их по порядку. Нижние суммы - это те, которые ближе к 1-му, и тем выше, чем ниже.

static void Main(string[] args) 
    { 
     string[] strList1 = new string[] { "TDC1ABF", "TDC1ABI", "TDC1ABO" }; 
     string[] strList2 = new string[] { "TDC2ABF", "TDC2ABI", "TDC2ABO" }; 
     string[] strList3 = new string[] { "TDC3ABF", "TDC3ABO", "TDC3ABI" }; 


     arrange(strList1); 
     arrange(strList2); 
     arrange(strList3); 
    } 

    public static void arrange(string[] list) 
    { 
     Console.WriteLine("OUT OF ORDER"); 
     foreach (string item in list) 
     { 
      Console.WriteLine(item); 
     } 
     Console.WriteLine(); 
     for (int x = 0; x < list.Length - 1; x++) 
     { 

      char[] temp = list[x].ToCharArray(); 
      char[] temp1 = list[x + 1].ToCharArray(); 

      int sum = 0; 

      foreach (char letter in temp) 
      { 
       sum += (int)letter; //This adds the ASCII value of each char 
      } 

      int sum2 = 0; 

      foreach (char letter in temp1) 
      { 
       sum2 += (int)letter; //This adds the ASCII value of each char 
      } 

      if (sum > sum2) 
      { 
       string swap1 = list[x]; 
       list[x] = list[x + 1]; 
       list[x + 1] = swap1; 
      } 

     } 
     Console.WriteLine("IN ORDER"); 
     foreach (string item in list) 
     { 
      Console.WriteLine(item); 
     } 
     Console.WriteLine(); 
     Console.ReadLine(); 
    } 
0

Если массивы гарантированно иметь столько элементов, сколько есть массивы, то вы могли бы сначала отсортировать отдельные массивы, свалка отсортированных массивов в массив NxN, а затем транспонировать матрицу.

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