我有问题。我有一个功能(几乎在所有地方使用)
public void Transfusion(PatientQueue patientQ, List<Event> scheduler)
{
Console.Write("\n### TRANSFUSION ###\nBefore Transfusion: " + BloodLevel);
var p1 = patientQ.RemovePatient(); // Take 1st patient from Queue and get him into var p1
Console.Write("\tNeed " + p1.BloodUnits + " blood units..");
// Remodeling of scheduler, making UT units first in scheduler
SortedByType(scheduler);
Console.WriteLine("\n\nPOSORTOWANY SCHEDULER: \n\n");
ShowScheduler(scheduler);
for (int i = 0; i < p1.BloodUnits; i++)
{
BloodStorageList.RemoveAt(0); // Removes blood Unit from the System
scheduler.RemoveAt(0); // Removes information about utilisation from Scheduler
}
Console.WriteLine("\n\nPO USUNIECIU: \n\n");
ShowScheduler(scheduler);
BloodLevel = BloodLevel - p1.BloodUnits; // Reduce BloodLevel
Console.WriteLine("\tAfter Transfusion: " + BloodLevel);
Sorted(scheduler);
}
现在让我们专注于调度程序和排序。我想去SortByType。这是我的功能(工作正常)
scheduler = scheduler.OrderBy(a => a.Type).ThenBy(a => a.EventTime).ToList();
foreach (var schedul in scheduler) Console.WriteLine($"{schedul.Type} : {schedul.EventTime}");
Console.Read();
让我们来看看控制台。CLICK HERE 它看起来像在函数中一切都很好,但是当我想继续调度时,函数内部发生的事情并不起作用。有人能帮助我吗?
答案 0 :(得分:1)
听起来你想要分开列表但是一起管理。换句话说,您希望单独对Type进行排序,并将其放置在EventTime上,EventTime也是自己排序的。实现此目的的一种方法(可能是或不是我承认的最佳方式)是将它们分类为一个列表并将它们添加回可以管理的新排序列表。
我做了一个例子,我按姓名和密码对人进行排序。显然,Person模型对于这个例子来说很糟糕,但是我已经抓了它,所以我使用它。
在这个例子中,我首先按名称对人进行排序并引用它,然后我按密码对人进行排序并引用它。最后,我创建一个新的人员列表,并按排序的名称和密码将每个人添加到列表中。如果这不是您正在寻找或要求的,请告诉我,我将删除答案。
using System;
using System.Collections.Generic;
using System.Linq;
namespace Question_Answer_Console_App
{
public class Program
{
[STAThread]
static void Main(string[] args)
{
var people = new List<Person>()
{
new Person() { Name = "Mathew", Password = "2345" },
new Person() { Name = "Mathew", Password = "1234" },
new Person() { Name = "John", Password = "5678" },
new Person() { Name = "Mark", Password = "5678" },
new Person() { Name = "Luke", Password = "0987" },
new Person() { Name = "John", Password = "6534" }
};
var names = people.OrderBy(person => person.Name).Select(person => person.Name).ToList();
var passwords = people.OrderBy(person => person.Password).Select(person => person.Password).ToList();
var sortPeople = new List<Person>();
for (int i = 0; i < names.Count(); i++) sortPeople.Add(new Person() { Name = names[i], Password = passwords[i] });
foreach (var person in sortPeople) Console.WriteLine($"{person.Name} : {person.Password}");
Console.Read();
}
}
public class Person
{
public string Name { get; set; }
public string Password { get; set; }
}
}
我真的觉得有一个linq查询可以解决这个问题,但我无法绕过它。如果您正在寻找,请告诉我。