В C# можно использовать метод List.Sort и передать в него компаратор для сравнения элементов списка. Компаратор должен сравнивать элементы по времени в порядке возрастания.
Вот пример кода:
csharpCopy code
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<string> zenki = new List<string>
{
"имя1 - (2 ч, 10 мин, 43 мин)",
"имя2 - (1 ч, 55 мин, 43 мин)",
"имя3 - (1 ч, 25 мин, 30 мин)"
};
zenki.Sort((s1, s2) =>
{
// Извлекаем время из строк s1 и s2
TimeSpan t1 = ExtractTime(s1);
TimeSpan t2 = ExtractTime(s2);
// Сравниваем времена
return t1.CompareTo(t2);
});
// Выводим отсортированный список
foreach (string s in zenki)
{
Console.WriteLine(s);
}
}
static TimeSpan ExtractTime(string s)
{
// Извлекаем время из строки
int h = 0, m1 = 0, m2 = 0;
int pos = s.IndexOf('(') + 1;
int len = s.IndexOf(')') - pos;
string[] parts = s.Substring(pos, len).Split(',');
foreach (string part in parts)
{
string[] subparts = part.Trim().Split(' ');
int value = int.Parse(subparts[0]);
if (subparts[1] == "ч")
{
h = value;
}
else if (subparts[1] == "мин")
{
m1 = value;
}
else if (subparts[1] == "с")
{
m2 = value;
}
}
// Преобразуем время в TimeSpan
return new TimeSpan(h, m1, m2);
}
}
В этом примере мы используем лямбда-выражение для создания компаратора, который сравнивает элементы списка по времени, извлеченному из строк элементов с помощью метода ExtractTime. Этот метод извлекает часы, минуты и секунды из строки и преобразует их в объект TimeSpan.