每个queue[i]
都有一个drone[i]
。
我的问题:如何制作等待每个drone[i].actual_position == drone[i].desired_position
的代码而不是当前的代码只等待当前的无人机drone[i]desired_position == drone[i].actual_position
所以不要这样:
for (int i = 0; i < drones.Length; i++)
{
queue[i].Enqueue(drone[i].desired_position);
if (drone[i]desired_position == drone[i].actual_position)
{
queue[i].Dequeue();
queue[i].Enqueue(next_desired_position);
}
}
我想要这样的事情:
for (int i = 0; i < drones.Length; i++)
{
queue[i].Enqueue(drone[i].desired_position);
//TODO: what should I put into "if"?
if (/* all drone[i]desired_position == drone[i].actual_position */)
{
queue[i].Dequeue();
queue[i].Enqueue(next_desired_position)
}
}
TLDR:我想确保每个无人机在出列前都处于他想要的位置并前往下一个位置,以便无人机同步。
答案 0 :(得分:5)
您好像正在寻找All
Linq 命令以及for
循环和if
交换:
// If all drones are at their expected positions
if (drone.All(d => d.desired_position == d.actual_position))
// then set new goals for each drone:
for (int i = 0; i < drone.Length; ++i) {
// remove the target achieved
queue[i].Dequeue();
// but add a new location to go
queue[i].Enqueue(next_desired_position)
}
答案 1 :(得分:4)
我猜你正在寻找的是Linq的All
- 方法:
var allOkay = drones.All(d => d.desired_position == d.actual_position);
if(allOkay)
{
foreach(var drone in drones)
drone.Dequeue();
}