2017-02-15 60 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(); 
} 
相關問題