Member 11543226 Ответов: 2

Как отсортировать список строк?


I am working on one project and now i am stuck on very silly program i.e sorting list.
I have list of items range between 0-500 . and items like (e.g "45848^kjf,10" , "450240^jdk,20" , "448278^dj,30"). 
My current code sort list in decending order but the order gets wrong result . i.e

1. 45848^kjf,10
2. 450240^jdk,20
3. 448278^dj,30

I want to sort list items with respective to the number before "^" this symbol and 45848 is smaller than below two numbers so, my expected result is  

1. 450240^jdk,20
2. 448278^dj,30
3. 45848^kjf,10

How can i get this result?  here is my code,


Что я уже пробовал:

listcode.Sort(); // listcode is String list
               listcode.Reverse();

2 Ответов

Рейтинг:
14

Karthik_Mahalingam

пробовать

string[] items = { "45848^kjf,10", "450240^jdk,20", "448278^dj,30" };
          var listcode = items.ToList();
         var result =  listcode.Select(k => new { value = int.Parse( k.Substring(0, k.IndexOf('^'))), item = k }).OrderByDescending(k => k.value).Select(k => k.item).ToList();


Member 11543226

Спасибо это работает

Рейтинг:
0

Midi_Mick

Есть два способа сделать это - либо вам нужно реализовать IComparer<string>, или делегат сравнения. Второй метод может быть легко выполнен как лямбда-делегат в вызове метода сортировки.

listcode.Sort(delegate(string1, string2) {
    int num1, num2;
    try {
        num1 = int.Parse(string1.SubString(0, string1.IndexOf('^')));
        num2 = int.Parse(string2.SubString(0, string2.IndexOf('^')));
        return num1.CompareTo(num2);
    }
    catch {
        // Handle the case one of the strings are not in correct format
    }
});


В противном случае создайте класс, реализующий IComparer<string>. Этот класс будет иметь Compare(string1, string2) метод в нем, который будет в значительной степени идентичен лямбда-делегату выше. Тогда вы звоните listcode.Sort(new MyComparerClass());. Смотреть документация MSDN для IComparer[^] для примера того, как это реализовать.