对于这个应用程序,我想把动物放入火车。有6种动物。大型食肉动物,中型食肉动物小食肉动物,大型食草动物,中型食草动物和小型食草动物。我想按照确切的顺序将它们放入我的列表中。我该怎么做?
这是我的动物类:
公共bool食肉动物; public Size size;
public Animal(bool carnivore, Enum size)
{
this.carnivore = carnivore;
this.size = (Size) size;
}
这是我要订购的课程:
public List<Animal> Animals = new List<Animal>();
public List<Wagon> Wagons = new List<Wagon>();
public void Arrange()
{
Wagon w = new Wagon();
Wagons.Add(w);
foreach (Animal animal in Animals.ToList())
{
foreach (Wagon wagon in Wagons.ToList())
{
if (wagon.addAnimal(animal))
{
wagon.addAnimal(animal);
Animals.Remove(animal);
break;
}
else
{
Wagon wag = new Wagon();
wag.addAnimal(animal);
Animals.Remove(animal);
Wagons.Add(wag);
}
}
}
}
}
这是枚举:
public enum Size
{
Small = 1,
Medium = 3,
Large = 5
}
我已经找到了一些订单,然后是事物,但它们似乎不起作用。如果我忽略了一个看起来像我的问题,我很抱歉。
感谢您的帮助!
答案 0 :(得分:1)
您可以使用包含非常有用的扩展方法的命名空间System.Linq
来处理列表和IEnumerables<T>
。
要根据需要进行排序,您可以使用:
Animals.OrderBy(a => a.carnivore).ThenBy(a => a.size);
答案 1 :(得分:0)
要通过肉食和大小将动物分成6辆货车,您可以使用LINQ&#39; GroupBy
:
public void Arrange()
{
Wagons.AddRange(
Animals.GroupBy(animal => new {animal.carnivore, animal.size})
.Select(g =>
{
Wagon wagon = new Wagon();
foreach(Animal animal in g)
wagon.addAnimal(animal);
return wagon;
}));
}
您可以在投射到货车之前对这些组进行排序:
public void Arrange()
{
var groupedAnimals = Animals.GroupBy(animal => new {animal.carnivore, animal.size});
var orderedGroups = groupedAnimals.OrderBy(g => g.carnivore).ThenBy(g => g.size);
Wagons.AddRange(orderedGroups.Select(g =>
{
Wagon wagon = new Wagon();
foreach(Animal animal in g)
wagon.addAnimal(animal);
return wagon;
}));
}
但正如其他人提到的那样,结果顺序现在取决于size
枚举的声明。