c# - 在每次迭代中有条件地使用不同数量的项目

标签 c# iterator iteration

我想这真的很简单,只涉及使用迭代器和 .MoveNext() 方法。

但假设您正在遍历一个集合,您对集合做了一些工作,但基于每个“循环”中的某些条件,您可能必须获取 2 个或更多项目并基本上跳过它们,这样您就不会循环接下来通过它们。

例子:

foreach (Fish fish in ParcelOfFish)
{
    GiverPersonFish(fish);
}

在这里,我只是循环访问 Fish 的集合并将它们传递给一个方法。有些鱼很小,所以我必须再给这个人一条,这样它才不会饿死。

foreach (Fish fish in ParcelOfFish)
{
    GiverPersonFish(fish);

    if (fish.IsSmall)
    {
        GiverPersonFish(ParcelOfFish.MoveNext()); // here I want to give him the next fish
    }
}

这将如何工作,以便我给出的第二条鱼不会在下一个循环中重复?

另外,为了让这个更棘手,一个人可能会得到一条大鱼和一条小鱼是不公平的,所以每当有一条小鱼时,我不想从迭代中抓起另一条小鱼然后继续。

所以如果订单是

Small
Big
Big
Small
Big
Small

在第一次“循环”之后,他将得到两个小的(索引 0 和 3),它将像这样遍历其余部分:

Big
Big
Big
Small

编译器似乎不喜欢在遍历迭代时像那样修改迭代。

最佳答案

从设计上讲,迭代并不意味着要像这样工作。如果您需要更灵活的行为,您应该使用 for 循环。

关于c# - 在每次迭代中有条件地使用不同数量的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360555/

相关文章:

c# - 如何在没有重新排序列表的情况下更新列表顺序?

java - java中的迭代器类型(弱一致性)

c++ - 迭代 vector 和调用函数

java - 如何迭代 LoadingCache 谷歌类

loops - 有没有一种方法可以使用 Delphi 的 for .. in .. do 来迭代 FireDAC 的 TFDParams?

javascript - 简化 JavaScript 中的迭代 if/else if 语句

c# - ASP :Image with Link

c# - 任务回调和 OnCompleted() 之间的区别

c# - .Net 远程处理功能

c++ - 如何使用插入函数和迭代器更改 vector 中的元素?