我一直在阅读有关foreach
和列表迭代的内容,我了解如何设置它。
我在整个研究过程中未能找到的是如何不止一次迭代。为了更好地解释,这是我的具体例子:
我正在创建一个A *路径请求管理器,它将每个请求的给定数量的搜索周期分开。因此,它需要遍历其LinkedList
个请求,每个请求分配一个搜索周期。不用说,它始于1000个周期,它需要不止一次地遍历其请求列表,以便均匀地分配所有周期。
如何确保列表继续迭代?对while
或for
循环来说,这是一项更好的任务吗?或者有没有办法使用foreach
?
如果它有助于任何人进一步理解我的问题,这里是我现在的代码:
//Method: UpdateSearches()
//Purpose: to distribute all available search cycles
// between all active searches
// if a search completes or fails during this
// update, this method will notify the pathfinder
// who made the request
//Parameters: none
//Returns: nothing
public void UpdateSearches()
{
//start off with a full number of cycles
int cyclesRemaining = this.searchCyclesPerUpdate;
//cycle through all active requests
foreach (Pathfinder request in this.searchRequests)
{
while ((cyclesRemaining > 0) &&
(this.searchRequests.Count != 0))
{
//one search cycle
SearchStatus result = request.OneCycle();
//if the search completes (success or failure)
if (result == SearchStatus.targetFound ||
result == SearchStatus.targetNotFound)
{
//remove this request from the queue
this.searchRequests.Remove(request);
} //end if
//move on to the next request
cyclesRemaining--;
} //end while
} //end foreach
} //end method
答案 0 :(得分:4)
我不会使用列表,而是Queue
或ConcurrentQueue
- 您Enqueue
例如1000个请求...然后您使用while
循环Count > 0
上的一个条件来迭代它的内容...你Dequeue
一个请求并执行它...如果需要重新执行它,那么你再次Enqueue
它。 ..这样它会被添加回来,但最终会让执行保持公平/均匀。
答案 1 :(得分:1)
您无法修改正在迭代的集合,以下代码将在运行时抛出异常:
foreach (Pathfinder request in this.searchRequests)
{
//remove this request from the queue
this.searchRequests.Remove(request);
} //end foreach
为了多次迭代,将foreach放在另一个循环结构中。毕竟,似乎foreach不是这里工作的合适工具。