Как отсортировать данные по приоритету, чтобы сначала шли элементы с приоритетом один, а затем с приоритетом три на C#?

Привет! У меня возникли сложности с сортировкой массива данных очередей в C#. Массив содержит как первоочередные, так и общие очереди, и нужно расположить их так, чтобы сначала шли первоочередные, затем три записи общих очередей, потом снова первоочередные и так далее. 
Я попробовал использовать метод сортировки, но у меня не получается. Можете ли вы подсказать, как это можно реализовать в C# с использованием данной структуры данных?

```csharp
public class Queues
{
    public long ID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string Privilege { get; set; } // тип очереди. Первоочередной =П, общий очередь = О
    public DateTime Create_Date { get; set; } //дата создания
    public TimeSpan Create_Time { get; set; }
}
```
  • 18 декабря 2023 г. 10:28
Ответы на вопрос 2
Вы можете отсортировать массив данных очередей с использованием метода `OrderBy` из пространства имен `System.Linq`. Вот пример кода, который показывает, как сделать это:

```csharp
using System;
using System.Collections.Generic;
using System.Linq;

public class Queues
{
    public long ID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string Privilege { get; set; } // тип очереди. Первоочередной =П, общий очередь = О
    public DateTime Create_Date { get; set; } //дата создания
    public TimeSpan Create_Time { get; set; }
}

public class Program
{
    public static void Main(string[] args)
    {
        List<Queues> queuesList = new List<Queues>()
        {
            new Queues { ID = 1, LastName = "Иванов", FirstName = "Иван", MiddleName = "Иванович", Privilege = "П", Create_Date = DateTime.Now, Create_Time = TimeSpan.Parse("10:00") },
            new Queues { ID = 2, LastName = "Петров", FirstName = "Петр", MiddleName = "Петрович", Privilege = "О", Create_Date = DateTime.Now, Create_Time = TimeSpan.Parse("10:30") },
            new Queues { ID = 3, LastName = "Сидоров", FirstName = "Сидор", MiddleName = "Сидорович", Privilege = "О", Create_Date = DateTime.Now, Create_Time = TimeSpan.Parse("11:00") },
            new Queues { ID = 4, LastName = "Алексеев", FirstName = "Алексей", MiddleName = "Алексеевич", Privilege = "П", Create_Date = DateTime.Now, Create_Time = TimeSpan.Parse("11:30") },
            new Queues { ID = 5, LastName = "Федоров", FirstName = "Федор", MiddleName = "Федорович", Privilege = "П", Create_Date = DateTime.Now, Create_Time = TimeSpan.Parse("12:00") },
            new Queues { ID = 6, LastName = "Николаев", FirstName = "Николай", MiddleName = "Николаевич", Privilege = "О", Create_Date = DateTime.Now, Create_Time = TimeSpan.Parse("12:30") }
        };

        // Сортировка по приоритету
        queuesList = queuesList.OrderBy(q => q.Privilege == "П" ? 0 : 1).ThenBy(q => q.ID).ToList();

        // Вывод отсортированных данных
        foreach (var queue in queuesList)
        {
            Console.WriteLine($"ID: {queue.ID}, Привилегия: {queue.Privilege}");
        }

        Console.ReadLine();
    }
}
```

Этот код сортирует список очередей (`queuesList`) сначала по приоритету (сначала перед первыми очередями с приоритетом "П", затем перед общими очередями с приоритетом "О") и затем по идентификатору.
Если долго не думать, то можно разделить на два списка: приоритетные и неприоритетные. 
И записать в список "один-через-три".
Похожие вопросы