编辑:不要使用for-in迭代一个数组,使用它来迭代对象的属性 。 我会保留这个答案作为参考。 谢谢大家! 我理解JavaScript中循环的基本的for-in语法如下所示: for(var obj in myArray) { } 但是我如何获得循环计数器/索引? 我知道我可以做一些事情: var i = 0 for(var obj in myArray) { alert(i) i++ } 甚至是好的,旧的: var i for(i = 0; 1 < myArray.length(); i++) { var obj = myArray[i] alert(i) } 但我宁愿使用更简单的for-in循环。 我认为他们看起来更好,更有意义。 但有没有更简单或更优雅的方式? 在Python中很容易: for i, obj in enumerate(myArray): print i
几乎所有的语言都有一个foreach循环或类似的东西。 C有吗? 你可以发布一些示例代码?
这三种方法之间的性能差异是什么(如果有的话),都用于将数组转换为另一个数组? 使用foreach 使用array_map和lambda / closure函数 使用array_map与“静态”函数/方法 还有其他的方法吗? 为了使自己清楚,让我们看看这些例子,都做了相同的事情 – 乘以10的数组: $numbers = range(0, 1000); 的foreach $result = array(); foreach ($numbers as $number) { $result[] = $number * 10; } return $result; 与lambda映射 return array_map(function($number) { return $number * 10; }, $numbers); 映射“静态”函数,作为string引用传递 function tenTimes($number) { return $number * 10; } return array_map('tenTimes', $numbers); 还有其他的方法吗? 我会很高兴地听到上述情况之间的所有差异,以及为什么应该用其他方式来替代别人。
让我们想象一下,我们有一个结构体,可以用一些成员函数来保存3个双打: struct Vector { double x, y, z; // … Vector &negate() { x = -x; y = -y; z = -z; return *this; } Vector &normalize() { double s = 1./sqrt(x*x+y*y+z*z); x *= s; y *= s; z *= s; return *this; } // … }; 这简单一点,但我相信你也同意类似的代码在那里。 这些方法可以让您方便地链接,例如: Vector v = …; v.normalize().negate(); 甚至: […]
我知道我可以使用一个for语句并达到相同的效果,但我可以通过在C#中的foreach循环向后循环?
可能重复: Ruby中的每个自动计数器? 我想在每个循环中找出当前的索引。 我该怎么做? X=[1,2,3] X.each do |p| puts "current index…" end
如果我使用: var strings = new List<string> { "sample" }; foreach (string s in strings) { Console.WriteLine(s); strings.Add(s + "!"); } 在foreach的Add抛出一个InvalidOperationExceptionexception(集合被修改;枚举操作可能不会执行),我认为这是合乎逻辑的,因为我们正在从我们脚下扯下地毯。 但是,如果我使用: var strings = new List<string> { "sample" }; strings.ForEach(s => { Console.WriteLine(s); strings.Add(s + "!"); }); 它通过循环立即在脚中自我射击,直到抛出OutOfMemoryException。 这对我来说是一个惊喜,因为我一直认为List.ForEach不是为了foreach就是为了包装。 有没有人有解释如何和为什么这种行为? (由ForEach循环为无限重复的generics列表启发)
我有一个ArrayList,我想迭代。 在迭代时,我必须同时删除元素。 显然这引发了一个java.util.ConcurrentModificationException 。 处理这个问题的最佳做法是什么? 我应该首先克隆列表吗? 我删除不在循环中的元素,而是代码的另一部分。 我的代码如下所示: public class Test() { private ArrayList<A> abc = new ArrayList<A>(); public void doStuff() { for (A a : abc) a.doSomething(); } public void removeA(A a) { abc.remove(a); } } a.do可能会调用Test.removeA();
我有一个input(比方说一个文件)。 每行都有一个文件名。 我怎样才能读取这个文件并显示每个文件的内容。
我遍历一个对象的数组,并希望删除基于它的'id'属性的对象之一,但我的代码不起作用。 foreach($array as $element) { foreach($element as $key => $value) { if($key == 'id' && $value == 'searched_value'){ //delete this particular object from the $array unset($element);//this doesn't work unset($array,$element);//neither does this } } } 有什么build议么。 谢谢。