Сортировка списка

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Добрый день
Подскажите как решить данную проблему. С AI не вышло решить (

Есть список с названием temp
В списке содержатся строки:

D:\Project\10h.txt
D:\Project\11h.txt
D:\Project\12h.txt
D:\Project\13h.txt
D:\Project\14h.txt
D:\Project\15h.txt
D:\Project\16h.txt
D:\Project\17h.txt
D:\Project\18h.txt
D:\Project\19h.txt
D:\Project\1h.txt
D:\Project\20h.txt
D:\Project\21h.txt
D:\Project\22h.txt
D:\Project\2h.txt
D:\Project\3h.txt
D:\Project\4h.txt
D:\Project\5h.txt
D:\Project\6h.txt
D:\Project\7h.txt
D:\Project\8h.txt
D:\Project\9h.txt


Нужно отсортировать список что бы получилось по возрастанию:
D:\Project\1h.txt
D:\Project\2h.txt
D:\Project\3h.txt
D:\Project\4h.txt
D:\Project\5h.txt
D:\Project\6h.txt
D:\Project\7h.txt
D:\Project\8h.txt
D:\Project\9h.txt
D:\Project\10h.txt
D:\Project\11h.txt
D:\Project\12h.txt
D:\Project\13h.txt
D:\Project\14h.txt
D:\Project\15h.txt
D:\Project\16h.txt
D:\Project\17h.txt
D:\Project\18h.txt
D:\Project\19h.txt
D:\Project\20h.txt
D:\Project\21h.txt
D:\Project\22h.txt

и вариант на оборот.

За ранее спасибо
 
Последнее редактирование:

Ахилес

Client
Регистрация
11.11.2020
Сообщения
867
Благодарностей
353
Баллы
63
задай задачу ИИ , что бы сделал код для сортировки списка с добавлением лидирующих нулей в каждую строку. 10 или больше, в зависимости от длины имени файлов
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
C#:
using System;
using System.Collections.Generic;
using System.Linq;

class Программа
{
    static void Main()
    {
        List<string> temp = new List<string>
        {
            "D:\\Project\\10h.txt",
            "D:\\Project\\11h.txt",
            // Добавьте другие элементы списка здесь
        };

        // Используем собственный компаратор для сортировки
        temp.Sort(new ЧисловойКомпаратор());

        // Выводим отсортированный список
        foreach (string item in temp)
        {
            Console.WriteLine(item);
        }
    }
}

// Класс для собственного компаратора
public class ЧисловойКомпаратор : IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Извлекаем числовую часть строки и сравниваем как числа
        int числоX = int.Parse(System.IO.Path.GetFileNameWithoutExtension(x).Replace("h", ""));
        int числоY = int.Parse(System.IO.Path.GetFileNameWithoutExtension(y).Replace("h", ""));

        return числоX.CompareTo(числоY);
    }
}
Вот что он мне выдал на поставленный вопрос
Но не работает
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
867
Благодарностей
353
Баллы
63
C#:
using System;
using System.Collections.Generic;
using System.Linq;

class Программа
{
    static void Main()
    {
        List<string> temp = new List<string>
        {
            "D:\\Project\\10h.txt",
            "D:\\Project\\11h.txt",
            // Добавьте другие элементы списка здесь
        };

        // Используем собственный компаратор для сортировки
        temp.Sort(new ЧисловойКомпаратор());

        // Выводим отсортированный список
        foreach (string item in temp)
        {
            Console.WriteLine(item);
        }
    }
}

// Класс для собственного компаратора
public class ЧисловойКомпаратор : IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Извлекаем числовую часть строки и сравниваем как числа
        int числоX = int.Parse(System.IO.Path.GetFileNameWithoutExtension(x).Replace("h", ""));
        int числоY = int.Parse(System.IO.Path.GetFileNameWithoutExtension(y).Replace("h", ""));

        return числоX.CompareTo(числоY);
    }
}
Вот что он мне выдал на поставленный вопрос
Но не работает
тут нет добавления лидирующий нулей. исправь запрос для ИИ
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
867
Благодарностей
353
Баллы
63
а чо не работает то ?
выглядит работающим вариантом. сравнение как числа. даже лидирующий нулей не надо, они для строк нужны
 

slavyn8213

Client
Регистрация
28.10.2018
Сообщения
173
Благодарностей
39
Баллы
28

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
114021



C#:
class Программа
{
    static void Main()
    {
        List<string> temp = new List<string>
        {
            "D:\\Project\\10h.txt",
            "D:\\Project\\11h.txt",
            // Добавьте другие элементы списка здесь
        };

        // Используем собственный компаратор для сортировки
        temp.Sort(new ЧисловойКомпаратор());

        // Выводим отсортированный список
        foreach (string item in temp)
        {
            Console.WriteLine(item);
        }
    }
}

// Класс для собственного компаратора
public class ЧисловойКомпаратор : IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Извлекаем числовую часть строки и сравниваем как числа
        int числоX = int.Parse(System.IO.Path.GetFileNameWithoutExtension(x).Replace("h", ""));
        int числоY = int.Parse(System.IO.Path.GetFileNameWithoutExtension(y).Replace("h", ""));

        return числоX.CompareTo(числоY);
    }
}
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Спасибо за проявленный интерес
Но сортирует не так как надо

D:\Project\9h.txt
D:\Project\8h.txt
D:\Project\7h.txt
D:\Project\6h.txt
D:\Project\5h.txt
D:\Project\4h.txt
D:\Project\3h.txt
D:\Project\2h.txt
D:\Project\22h.txt
D:\Project\21h.txt
D:\Project\20h.txt
D:\Project\19h.txt
D:\Project\18h.txt
D:\Project\17h.txt
D:\Project\16h.txt
D:\Project\15h.txt
D:\Project\14h.txt
D:\Project\13h.txt
D:\Project\12h.txt
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
867
Благодарностей
353
Баллы
63
Посмотреть вложение 114021


C#:
class Программа
{
    static void Main()
    {
        List<string> temp = new List<string>
        {
            "D:\\Project\\10h.txt",
            "D:\\Project\\11h.txt",
            // Добавьте другие элементы списка здесь
        };

        // Используем собственный компаратор для сортировки
        temp.Sort(new ЧисловойКомпаратор());

        // Выводим отсортированный список
        foreach (string item in temp)
        {
            Console.WriteLine(item);
        }
    }
}

// Класс для собственного компаратора
public class ЧисловойКомпаратор : IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Извлекаем числовую часть строки и сравниваем как числа
        int числоX = int.Parse(System.IO.Path.GetFileNameWithoutExtension(x).Replace("h", ""));
        int числоY = int.Parse(System.IO.Path.GetFileNameWithoutExtension(y).Replace("h", ""));

        return числоX.CompareTo(числоY);
    }
}
это код для консольной программы C# , его надо адаптировать для зенки. поместить нужные функции в общий код.
можете в конкурсных статьях глянуть, там есть описание работы VS и зенно.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
Спасибо за проявленный интерес
Но сортирует не так как надо
114023

C#:
List<string> list = new List<string>
{
    @"D:\Project\55h.txt",
    @"D:\Project\13h.txt",
    @"D:\Project\18h.txt"
};

var temp = list.Select(x => {
    string name = Path.GetFileNameWithoutExtension(x); // БЕрем имя
    string num = new string(name.Where(char.IsDigit).ToArray()); // Оставляем только числа
    int number = 0;
    bool success = int.TryParse(num, out number); // если в имени чисел нет - считаем что там 0
    return Tuple.Create(number, x);
});
list = temp.OrderBy(x => x.Item1).Select(x => x.Item2).ToList(); // Сортируем по-возрастанию
//list = temp.OrderByDescending(x => x.Item1).Select(x => x.Item2).ToList(); // Сортируем по-убыванию


foreach (string s in list) { // list уже отсортирован
    project.SendInfoToLog(s); // смотрим в лог
}
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
Посмотреть вложение 114023
C#:
List<string> list = new List<string>
{
    @"D:\Project\55h.txt",
    @"D:\Project\13h.txt",
    @"D:\Project\18h.txt"
};

var temp = list.Select(x => {
    string name = Path.GetFileNameWithoutExtension(x); // БЕрем имя
    string num = new string(name.Where(char.IsDigit).ToArray()); // Оставляем только числа
    int number = 0;
    bool success = int.TryParse(num, out number); // если в имени чисел нет - считаем что там 0
    return Tuple.Create(number, x);
});
list = temp.OrderBy(x => x.Item1).Select(x => x.Item2).ToList(); // Сортируем по-возрастанию
//list = temp.OrderByDescending(x => x.Item1).Select(x => x.Item2).ToList(); // Сортируем по-убыванию


foreach (string s in list) { // list уже отсортирован
    project.SendInfoToLog(s); // смотрим в лог
}
Сортирует не так как надо
114024


А надо что бы было


D:\Project\1h.txt
D:\Project\2h.txt
D:\Project\3h.txt
D:\Project\4h.txt
D:\Project\5h.txt
D:\Project\6h.txt
D:\Project\7h.txt
D:\Project\8h.txt
D:\Project\9h.txt
D:\Project\10h.txt
D:\Project\11h.txt
D:\Project\12h.txt
D:\Project\13h.txt
D:\Project\14h.txt
D:\Project\15h.txt
D:\Project\16h.txt
D:\Project\17h.txt
D:\Project\18h.txt
D:\Project\19h.txt
D:\Project\20h.txt
D:\Project\21h.txt
D:\Project\22h.txt
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
121
Благодарностей
22
Баллы
18
это код для консольной программы C# , его надо адаптировать для зенки. поместить нужные функции в общий код.
можете в конкурсных статьях глянуть, там есть описание работы VS и зенно.
Это все прописано в общий код
114025
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
Сортирует не так как надо
Посмотреть вложение 114024

А надо что бы было


D:\Project\1h.txt
D:\Project\2h.txt
D:\Project\3h.txt
D:\Project\4h.txt
D:\Project\5h.txt
C#:
List<string> list = new List<string>
{
    @"D:\Project\1h.txt",
    @"D:\Project\10h.txt",
    @"D:\Project\100h.txt"
};

var temp = list.Select(x => {
    string name = Path.GetFileNameWithoutExtension(x); // БЕрем имя
    string num = new string(name.Where(char.IsDigit).ToArray()); // Оставляем только числа
    int number = 0;
    bool success = int.TryParse(num, out number);
    return Tuple.Create(number.ToString().PadLeft(6, '0'), x);
});
list = temp.OrderBy(x => x.Item1).Select(x => x.Item2).ToList(); // Сортируем по-возрастанию
//list = temp.OrderByDescending(x => x.Item1).Select(x => x.Item2).ToList(); // Сортируем по-убыванию


foreach (string s in list) { // list уже отсортирован
    project.SendInfoToLog(s); // смотрим в лог
}
114029
 
  • Спасибо
Реакции: ErikMoor и one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Сортирует не так как надо
Посмотреть вложение 114024

А надо что бы было


D:\Project\1h.txt
D:\Project\2h.txt
D:\Project\3h.txt
D:\Project\4h.txt
D:\Project\5h.txt
D:\Project\6h.txt
D:\Project\7h.txt
D:\Project\8h.txt
D:\Project\9h.txt
D:\Project\10h.txt
D:\Project\11h.txt
D:\Project\12h.txt
D:\Project\13h.txt
D:\Project\14h.txt
D:\Project\15h.txt
D:\Project\16h.txt
D:\Project\17h.txt
D:\Project\18h.txt
D:\Project\19h.txt
D:\Project\20h.txt
D:\Project\21h.txt
D:\Project\22h.txt
Переименуй 1h.txt в 01h.txt и т.д.
 
Последнее редактирование:

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
C#:
var list = project.Lists["Список 1"];
string pattern = @"\\(\d+)h\.txt$";

var list_temp = list.OrderBy(x=> int.Parse(Regex.Match(x, pattern).Groups[1].Value)).ToList();
list.Clear();
list.AddRange(list_temp);
Будет выбивать ошибку, если шаблон имени файла поменяется
 
  • Спасибо
Реакции: ErikMoor и BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
C#:
var list = project.Lists["Список 1"];
string pattern = @"\\(\d+)h\.txt$";

var list_temp = list.OrderBy(x=> int.Parse(Regex.Match(x, pattern).Groups[1].Value)).ToList();
list.Clear();
list.AddRange(list_temp);
Будет выбивать ошибку, если шаблон имени файла поменяется
Сохранил себе в таком виде (я с регулярками не дружу) в качестве примера :-)
C#:
var list = project.Lists["list"];
string pattern = @"\\(\d+)h\.txt$";
lock(SyncObjects.ListSyncer) list.AddRange(list.GetItems("ALL", true).OrderBy(x=> int.Parse(Regex.Match(x, pattern).Groups[1].Value)));
 
  • Спасибо
Реакции: ErikMoor, one и doc

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)