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

  • Автор темы Автор темы ErikMoor
  • Дата начала Дата начала

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Реакции
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

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

За ранее спасибо
 
Последнее редактирование:
задай задачу ИИ , что бы сделал код для сортировки списка с добавлением лидирующих нулей в каждую строку. 10 или больше, в зависимости от длины имени файлов
 
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);
    }
}

Вот что он мне выдал на поставленный вопрос
Но не работает
 
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);
    }
}

Вот что он мне выдал на поставленный вопрос
Но не работает
тут нет добавления лидирующий нулей. исправь запрос для ИИ
 
а чо не работает то ?
выглядит работающим вариантом. сравнение как числа. даже лидирующий нулей не надо, они для строк нужны
 
114020
 
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);
    }
}
 

Спасибо за проявленный интерес
Но сортирует не так как надо

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
 
Посмотреть вложение 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 и зенно.
 
Спасибо за проявленный интерес
Но сортирует не так как надо
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); // смотрим в лог
}
 
Посмотреть вложение 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
 
это код для консольной программы C# , его надо адаптировать для зенки. поместить нужные функции в общий код.
можете в конкурсных статьях глянуть, там есть описание работы VS и зенно.
Это все прописано в общий код
114025
 
Сортирует не так как надо
Посмотреть вложение 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
Сортирует не так как надо
Посмотреть вложение 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 и т.д.
 
Последнее редактирование:
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
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

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