2017-02-15 83 views
3

对于每个drone[i],我有queue[i]C# - 如果所有比较都为真,则返回true

我的问题:怎么能作出这样的等待每个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

你在寻找* Linq *吗? 'drone.All(d => d.desired_position == d.actual_position)' –

+0

它可以。但我的代码的结构是正确的?它可以在for循环中吗? – xDDD

+0

无人机采集是固定的还是在for循环中有更新? – Tinwor

回答

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) 
    } 
4

我猜you're lookging的是Linq's All - 方法:

var allOkay = drones.All(d => d.desired_position == d.actual_position); 
if(allOkay) 
{ 
    foreach(var drone in drones) 
     drone.Dequeue(); 
} 
相关问题