Questions tagged «foreach»

foreach是一个循环构造,为列表/集合/数组中的每个元素执行一段给定的代码。与for循环相比,foreach循环不需要编码器维护计数器变量来避免偏离1(fencepost)的bug。建议在需要对整个数组/列表/集合进行简单迭代时使用。

6
如何检查变量是否为数组?…或类似数组的东西
我想使用foreach带有变量的循环,但是NULL例如,该变量可以有许多不同的类型。 因此,在foreach测试之前: if(is_array($var)){ foreach($var as ... 但是我意识到它也可以是实现Iterator接口的类。也许我是盲人,但如何检查该类是否实现了接口?是否有类似is_a函数或inherits运算符的内容?我发现了class_implements,我可以使用它,但是也许有更简单的东西吗? 其次,更重要的是,我想这个功能是否存在,足以检查变量is_array或“实现Iterator接口”,还是应该测试更多功能?
90 php  arrays  foreach 

4
为什么List <T> .ForEach允许修改其列表?
如果我使用: var strings = new List&lt;string&gt; { "sample" }; foreach (string s in strings) { Console.WriteLine(s); strings.Add(s + "!"); } 在Add在foreach引发InvalidOperationException(集合被修改;枚举操作可能不会执行),我认为合理的,因为我们从我们脚下拉地毯。 但是,如果我使用: var strings = new List&lt;string&gt; { "sample" }; strings.ForEach(s =&gt; { Console.WriteLine(s); strings.Add(s + "!"); }); 它会迅速循环直到循环抛出OutOfMemoryException为止。 这让我感到意外,因为我一直以为List.ForEach只是for foreach或for 的包装for。 是否有人对此行为的方式和原因做出了解释? (由ForEach循环为泛型列表不断重复标记)
90 c#  list  foreach 


3
这是C ++ 11 for循环的已知陷阱吗?
让我们想象一下,我们有一个结构可以容纳带有某些成员函数的3个double: struct Vector { double x, y, z; // ... Vector &amp;negate() { x = -x; y = -y; z = -z; return *this; } Vector &amp;normalize() { double s = 1./sqrt(x*x+y*y+z*z); x *= s; y *= s; z *= s; return *this; } // ... }; 为了简化起见,这有点人为设计,但是我敢肯定您同意类似的代码已经存在。这些方法使您可以方便地进行链接,例如: Vector v …

12
冒号(:)运算符做什么?
显然,Java中冒号以多种方式使用。有人介意解释它的作用吗? 例如这里: String cardString = ""; for (PlayingCard c : this.list) // &lt;-- { cardString += c + "\n"; } 您将如何for-each以不同的方式编写此循环,以便不合并:?

6
普通数组如何基于范围工作?
在C ++ 11中,您可以使用基于范围的for,它foreach与其他语言一样。它甚至适用于纯C数组: int numbers[] = { 1, 2, 3, 4, 5 }; for (int&amp; n : numbers) { n *= 2; } 它怎么知道什么时候停止?它仅适用于在相同范围内声明的静态数组for吗?您如何for在动态数组中使用它?
87 c++  arrays  foreach  c++11 

9
在C#中枚举时从List <T>中删除项目的智能方式
我有一个经典的案例,尝试在循环中枚举项目时从集合中删除它: List&lt;int&gt; myIntCollection = new List&lt;int&gt;(); myIntCollection.Add(42); myIntCollection.Add(12); myIntCollection.Add(96); myIntCollection.Add(25); foreach (int i in myIntCollection) { if (i == 42) myIntCollection.Remove(96); // The error is here. if (i == 25) myIntCollection.Remove(42); // The error is here. } 在发生更改后的迭代开始时,InvalidOperationException会抛出an ,因为枚举器不喜欢基础集合的更改。 我需要在迭代时对集合进行更改。有许多模式可以用来避免这种情况,但是似乎没有一个好的解决方案: 不要在此循环内删除,而要保留一个单独的“删除列表”,在主循环后进行处理。 通常,这是一个很好的解决方案,但就我而言,我需要立即“等待”该项目,直到真正删除该项目的主循环改变了我的代码的逻辑流程。 无需删除该项目,只需在该项目上设置一个标志并将其标记为非活动即可。然后添加模式1的功能以清理列表。 这将满足我的所有需求,但是这意味着每次访问一个项目时,为了检查非活动标志,必须更改许多代码。按我的喜好,这太过分了。 以某种方式将模式2的思想纳入源自的类中List&lt;T&gt;。此超级列表将处理非活动标志,事实结束后的对象删除,也不会向枚举使用者显示标记为非活动的项目。基本上,它只是封装了模式2(以及随后的模式1)的所有思想。 是否存在这样的类?有人为此提供代码吗?或者,还有更好的方法? 有人告诉我,访问myIntCollection.ToArray()而不是myIntCollection可以解决问题,并允许我在循环内删除。 对我来说,这似乎是一种糟糕的设计模式,或者还好吗? 细节: 该列表将包含许多项目,我将仅删除其中一些。 …
86 c#  list  foreach  enumeration 

7
foreach循环如何在C#中工作?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4个月前关闭。 改善这个问题 哪些类型的类可以使用foreach循环?
86 c#  foreach 

3
Java 8 Stream中的forEach vs forEachOrdered
我知道这些方法的执行顺序不同,但是在我所有的测试中,我无法实现不同的执行顺序。 例: System.out.println("forEach Demo"); Stream.of("AAA","BBB","CCC").forEach(s-&gt;System.out.println("Output:"+s)); System.out.println("forEachOrdered Demo"); Stream.of("AAA","BBB","CCC").forEachOrdered(s-&gt;System.out.println("Output:"+s)); 输出: forEach Demo Output:AAA Output:BBB Output:CCC forEachOrdered Demo Output:AAA Output:BBB Output:CCC 请提供示例,说明两种方法将产生不同的输出。

5
如何在C#中退出foreach循环?
foreach (var name in parent.names) { if name.lastname == null) { Violated = true; this.message = "lastname reqd"; } if (!Violated) { Violated = !(name.firstname == null) ? false : true; if (ruleViolated) this.message = "firstname reqd"; } } 每当违反为真时,我都想foreach立即退出循环。我该怎么做?
85 c#  foreach 

6
每个循环的C#以什么顺序遍历List <T>?
我想知道C#中的foreach循环遍历System.Collections.Generic.List&lt;T&gt;对象的顺序。 我发现了关于同一主题的另一个问题,但是我认为它不能使我满意。 有人指出没有顺序被定义。但是正如其他人所述,它遍历数组的顺序是固定的(从0到Length-1)。8.8.4 foreach语句 也有人说,对于带有顺序的任何标准类(例如List&lt;T&gt;)也是如此。我找不到任何文档来进行备份。因此,就我所知,它现在可能会像现在那样工作,但是也许在下一个.NET版本中,它会有所不同(即使可能不太可能)。 我也看了List(t).Enumerator运气不好的文档。 另一个相关问题指出,对于Java,它在文档中特别提到: List.iterator()以正确的顺序返回此列表中元素的迭代器。” 我正在C#文档中寻找类似的内容。 提前致谢。 编辑:谢谢您为我提供的所有答案(令人惊奇的是我得到这么多回复的速度如此之快)。从所有答案中我了解到的是,List&lt;T&gt;它始终会按其索引顺序进行迭代。但是我仍然希望看到一个清晰的文档说明这一点,类似于上的Java文档List。


12
使用嵌套的Foreach语句迭代多维数组
我认为这可能是一个非常简单的问题,但我还无法弄清楚。如果我有一个像这样的二维数组: int[,] array = new int[2,3] { {1, 2, 3}, {4, 5, 6} }; 用嵌套的foreach语句遍历数组的每个维度的最佳方法是什么?

13
在Perl中自动获取foreach循环中的循环索引
如果我在Perl中有以下数组: @x = qw(a b c); 然后使用进行遍历foreach,然后$_引用数组中的当前元素: foreach (@x) { print; } 将打印: abc 是否有类似的方法来获取当前元素的索引,而无需手动更新计数器?如: foreach (@x) { print $index; } 在哪里$index更新$_以产生输出: 012
77 perl  foreach 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.