C# - 如果所有比较都为真,则返回true

时间:2017-02-15 09:54:27

标签: c#

每个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:我想确保每个无人机在出列前都处于他想要的位置并前往下一个位置,以便无人机同步。

2 个答案:

答案 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();
}