2016-05-20 3 views
1

У меня есть строковый массив - представьте себе что-то вроде;как отсортировать массив строк на основе элементов другого списка

string[] Array = {a,b,c,d,e,a,b,c,d,e,a,b,c,d,e}

и У меня есть список - что-то вроде;

List<string> l = {a,b,c,d,e}

Мне нужно сортировать массив, как:

string[] sortedArray = {a,a,a,b,b,b,c,c,c,d,d,d,e,e,e}

Мой рабочий является:

public static List<string> SortByList(List<string> values, List<string> order) 
     { 
      return values.OrderBy(x => order.IndexOf(x)).ToList(); 
     } 
private void buttonGo_Click(object sender, EventArgs e) 
     { 
      List<string> alpha = new List<string>(); 
      List<string> m = new List<string>(); 
      string[] gamma = null; 

      using (StreamWriter sw = File.CreateText(pathSave)) 
      {  
       foreach (string st in parts) 
       { 
         alpha.Add(st); 
       } 
      } 
      using (StreamReader sr = new StreamReader(pathSave, true)) 
     { 
      gamma = File.ReadAllLines(pathSave); 
      foreach (string i in gamma) 
      { 
       l.Add(i); 
      } 
      m = SortByList(l, alpha); 
     } 

     using (StreamWriter sw = File.AppendText(pathSave)) 
     { 
      sw.Write("---------------------------------------------------------------------"); 
      foreach (string st in m) 
      { 
       sw.Write(st); 
       sw.Write("\r\n"); 
      } 
     } 
     } 

Короче говоря, alpha список строковых элементов и lines является string Array. Я хочу сортировать lines с учетом элементов в alpha. Может ли кто-нибудь помочь. Благодаря

+5

'array1.Orderby (х => array2.IndexOf (х))'. – juharr

+0

Не уверен, что вопрос верный. Скорее всего, ваш тайм-аут в графическом интерфейсе GUI и вы должны депортировать свое лечение в другое. –

+0

@ romain-aga эта часть кода неверна = 'foreach (строка a в alpha.ToList()) { var lines1 = lines.OrderBy (x => a) .ToList(); beta.Add (lines1); } ' – Jogi

ответ

2

Я думаю, что вы хотите сделать что-то вроде этого:

using System.IO; 
using System; 
using System.Collections.Generic; 
using System.Linq; 

class Program 
{ 
    static void Main() 
    { 
     var values = new List<string>{"a","b","c","d","e","a","b","c","d","e","a","b","c","d","e"}; 
     var order = new List<string>{"a","b","c","d","e"}; 

     var sortedList = SortByList(values, order); 

     foreach(var i in sortedList) 
     { 
      Console.WriteLine(i); 
     } 
    } 
    public static List<string> SortByList(List<string> values, List<string> order){ 
     return values.OrderBy(x => order.IndexOf(x)).ToList(); 
    } 
} 

Выход: aaabbbcccdddeee

+0

Спасибо за ваш ответ. Ваш ответ верен в буквальном контексте, но поскольку я реализую его концепцию в своем коде, к сожалению, это не дает желаемого результата. Я редактировал свой код в соответствии с вашим ответом, указанным выше. Пожалуйста, смотрите. Спасибо – Jogi

+1

Я думаю, я не совсем уверен, что вы пытаетесь сделать здесь. Я думал, что вы пытаетесь сортировать, но, очевидно, в вашей спецификации больше. Вы пытаетесь: открыть файл, прочитать его содержимое, отсортировать содержимое, а затем добавить отсортированный контент обратно в файл (не перезаписывать существующий контент?). Я думаю, что комментарий Корака выше правильно. Преодоление вашего кода на несколько методов, и задавать вопросы на более гранулированном уровне было бы лучше. – Jonathan

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