Tag: 迭代器

在C#中使用yield return iterators的目的/优点是什么?

我见过的所有使用yield return x;的例子都yield return x; 在一个C#方法内可以通过返回整个列表以相同的方式完成。 在这些情况下,使用yield return语句与返回列表是否有什么好处? 另外,在什么types的情况下会yield return ,你不能只返回完整的列表?

遍历一个string的每个字符在ruby1.8.6(each_char)

我是新来的ruby,目前试图在每个字符与ruby的基本string分开操作。 我正在使用ruby1.8.6,并希望做一些事情: "ABCDEFG".each_char do |i| puts i end 这会产生一个未定义的方法`each_char'错误。 我期待看到一个垂直输出: A B C D ..etc 是否仅为1.9定义了each_char方法? 我尝试使用简单的each方法,但块简单地输出一行中的整个string。 唯一的办法就是如何做到这一点,这是相当不方便的是从开始创build一个字符数组: ['A','B','C','D','…'].each do|i| puts i end 这输出所需的: A B C ..etc 有没有办法使用未修改的string来实现这个输出呢? 我认为Java的等价物是: for (int i = 0; i < aString.length(); i++){ char currentChar = aString.charAt(i); System.out.println(currentChar); }

如何获得使用迭代器时的当前循环索引?

我正在使用一个迭代器遍历一个集合,我想获取当前元素的索引。 我怎样才能做到这一点?

有无限发生器的expression式吗?

有一个直接的发生器expression式,可以产生无限的元素? 这是一个纯粹的理论问题。 这里不需要“实际”的答案:) 例如,制作一个有限的发生器很容易: my_gen = (0 for i in xrange(42)) 然而,为了创造一个无限的我需要“污染”我的命名空间与一个虚假的function: def _my_gen(): while True: yield 0 my_gen = _my_gen() 在单独的文件中执行操作并稍后import不计算在内。 我也知道itertools.repeat正是这样做的。 我很好奇,如果没有一个单线的解决scheme。

遍历一个string的行

我有一个像这样定义的多行string: foo = """ this is a multi-line string. """ 这个string我们用作我正在编写的parsing器的testinginput。 parsing器函数接收一个file作为input并对其进行迭代。 它也直接调用next()方法来跳过行,所以我确实需要一个迭代器作为input,而不是一个迭代器。 我需要一个迭代器迭代该string的各行,如file将超过文本文件的行。 我当然可以这样做: lineiterator = iter(foo.splitlines()) 有没有更直接的方法呢? 在这种情况下,string必须遍历一次,然后再由parsing器遍历。 在我的testing中,这并不重要,因为string很短,我只是出于好奇而问。 Python有这么多有用的和有效的内置的东西,但我找不到适合这种需求的东西。

使用'for'循环遍历C ++ Vector

我是C ++语言的新手。 我已经开始使用向量,并且已经注意到,在我看到的所有代码中,通过索引遍历一个向量, for循环的第一个参数总是基于向量。 在Java中,我可以用ArrayList做这样的事情: for(int i=0; i < vector.size(); i++){ vector[i].doSomething(); } 有没有一个原因,我没有看到这在C + +? 这是不好的做法吗?

const_iterator和iterator有什么区别?

这两者在STL里面的实现有什么区别。 性能有什么不同? 我猜什么时候只读,我们更喜欢const_iterator。 对? 谢谢。

JavaScript – 细微的myArray.forEach与for循环

我见过很多提示使用的问题: for (var i = 0; i < myArray.length; i++){ /* … */ } 代替: for (var i in myArray){ /* … */ } 对于数组,由于不一致的迭代( 请参阅此处 )。 但是,我似乎无法find任何似乎更喜欢面向对象的循环: myArray.forEach(function(item, index){ /* … */ }); 这对我来说似乎更直观。 对于我目前的项目,IE8的兼容性是重要的,我正在考虑使用Mozilla的polyfill ,但是我不是100%确定这将如何工作。 循环标准(上面的第一个例子)和现代浏览器的Array.prototype.forEach实现有什么区别吗? 现在的浏览器实现和Mozilla的实现有什么区别(特别是关于IE8)? 性能不是一个问题,只是与哪些属性迭代的一致性。

遍历node.js中的对象键

由于Javascript 1.7有一个Iterator对象,它允许这样做: var a={a:1,b:2,c:3}; var it=Iterator(a); function iterate(){ try { console.log(it.next()); setTimeout(iterate,1000); }catch (err if err instanceof StopIteration) { console.log("End of record.\n"); } catch (err) { console.log("Unknown error: " + err.description + "\n"); } } iterate(); 在node.js中有这样的东西吗? 现在我正在使用: function Iterator(o){ /*var k=[]; for(var i in o){ k.push(i); }*/ var k=Object.keys(o); return { next:function(){ return k.shift(); […]

Scala向下或减less循环?

在Scala中,您经常使用迭代器以递增顺序执行for循环,如下所示: for(i <- 1 to 10){ code } 你怎么做,所以从10到1? 我猜10 to 1给出一个空的迭代器(像平常的math范围)? 我做了一个Scala脚本,通过在迭代器上调用reverse来解决这个问题,但是我认为这不是很好,下面的路要走吗? def nBeers(n:Int) = n match { case 0 => ("No more bottles of beer on the wall, no more bottles of beer." + "\nGo to the store and buy some more, " + "99 bottles of beer on the wall.\n") case _ […]