Questions tagged «iterator»

迭代器是一种面向对象的编程模式,它允许遍历整个集合,而与物理内存中的实际实现或对象地址无关。它是“四人帮”的行为设计模式之一。


3
JavaScript-myArray.forEach与for循环的细微差别
我已经看到很多建议使用的问题: for (var i = 0; i < myArray.length; i++){ /* ... */ } 代替: for (var i in myArray){ /* ... */ } 对于数组,由于迭代不一致(请参见此处)。 但是,我似乎找不到任何似乎更喜欢面向对象循环的东西: myArray.forEach(function(item, index){ /* ... */ }); 对我来说,这似乎更直观。 对于我当前的项目,IE8兼容性很重要,我正在考虑使用Mozilla的polyfill,但是我不确定100%如何工作。 现代浏览器的for循环标准(上面的第一个示例)与Array.prototype.forEach实现之间是否有区别? 现代浏览器实现与上面链接到的Mozilla的实现之间有什么区别(特别注意IE8)? 性能并不是问题,只是迭代属性的一致性。

6
在迭代器上使用map()
假设我们有一个Map :,let m = new Map();使用会m.values()返回一个地图迭代器。 但我不能在迭代器上使用forEach()或map(),并且在该迭代器上实现while循环似乎是一种反模式,因为ES6提供了的功能map()。 那么有没有办法map()在迭代器上使用?

4
enumerate()-在Python中生成一个生成器
我想知道将生成器函数的结果传递给python的enumerate()时会发生什么。例: def veryBigHello(): i = 0 while i < 10000000: i += 1 yield "hello" numbered = enumerate(veryBigHello()) for i, word in numbered: print i, word 枚举是延迟进行的迭代,还是将所有内容都拖入了第一个?我99.999%的人肯定它是惰性的,所以我可以将它与生成器函数完全一样对待,还是需要注意任何事情?

7
为什么在JavaScript中对象不可迭代?
为什么默认情况下无法迭代对象? 我经常看到与迭代对象有关的问题,常见的解决方案是迭代对象的属性并以这种方式访问​​对象中的值。这似乎很常见,使我想知道为什么对象本身不可迭代。 for...of默认情况下,像ES6这样的语句很适合用于对象。因为这些功能仅适用于不包含{}对象的特殊“可迭代对象” ,所以我们必须仔细研究以使其适用于要用于它的对象。 for ... of语句创建一个循环,循环遍历可迭代对象 (包括Array,Map,Set,arguments对象等)... 例如,使用ES6生成器函数: var example = {a: {e: 'one', f: 'two'}, b: {g: 'three'}, c: {h: 'four', i: 'five'}}; function* entries(obj) { for (let key of Object.keys(obj)) { yield [key, obj[key]]; } } for (let [key, value] of entries(example)) { console.log(key); console.log(value); for (let …

13
用于估计统计中值,众数,模式,偏度,峰度的“在线”(迭代器)算法?
是否有一种算法可以估计一组值的中值,众数,偏度和/或峰度,但是不需要一次将所有值存储在内存中? 我想计算基本统计数据: 平均值:算术平均值 方差:与平均值的平方偏差的平均值 标准偏差:方差的平方根 中位数:将数字大半部分与小半部分分开的值 模式:集合中最常出现的值 偏度:tl; 博士 峰度:tl; 博士 计算其中任何一个的基本公式是小学算术,我确实知道它们。也有许多实现它们的统计资料库。 我的问题是我正在处理的集合中有大量(十亿个)值:在Python中工作,我不能仅仅创建包含数十亿个元素的列表或哈希。即使我用C编写此代码,十亿个元素的数组也不太实用。 数据未排序。它是由其他过程动态随机产生的。每个集合的大小是高度可变的,并且大小不会事先知道。 我已经弄清楚了如何很好地处理均值和方差,以任意顺序遍历集合中的每个值。(实际上,就我而言,我按它们生成的顺序进行处理。)这是我使用的算法,由http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm提供: 初始化三个变量:count,sum和sum_of_squares 对于每个值: 增量计数。 将值相加。 将值的平方添加到sum_of_squares。 将总和除以计数,并存储为变量均值。 将sum_of_squares除以计数,存储为变量mean_of_squares。 平方均值,存储为square_of_mean。 从mean_of_squares中减去square_of_mean,并存储为方差。 输出均值和方差。 这种“在线”算法具有弱点(例如,由于sum_of_squares迅速增长到大于整数范围或浮点精度的精度问题),但是它基本上满足了我的需要,而不必在每个集合中存储每个值。 但是我不知道是否存在类似的技术来估算其他统计数据(中位数,众数,偏度,峰度)。只要处理N个值所需的内存大大小于O(N),我就可以使用有偏估计器,甚至可以使用在某种程度上损害准确性的方法。 如果该库具有“在线”计算这些操作中的一项或多项的功能,则将我指向现有的统计信息库也将有所帮助。

5
在Ruby 1.8.6中迭代一个字符串的每个字符(each_char)
我是ruby的新手,目前尝试与ruby中的基本String分开对每个字符进行操作。我正在使用ruby 1.8.6,并想做类似的事情: "ABCDEFG".each_char do |i| puts i end 这会产生未定义的方法“ each_char”错误。 我期望看到垂直输出: A B C D ..etc 该each_char方法是否仅针对1.9定义?我尝试使用无each格式方法,但是该块只是将整个字符串输出到一行中。我弄清楚该怎么做的唯一方法,这很不方便,就是从一开始就创建一个字符数组: ['A','B','C','D','...'].each do|i| puts i end 这将输出所需的内容: A B C ..etc 也许有一种方法可以使用未修改的字符串开始实现此输出? 我认为Java等效项是: for (int i = 0; i < aString.length(); i++){ char currentChar = aString.charAt(i); System.out.println(currentChar); }
86 ruby  string  iterator 




1
如果range()是Python 3.3中的生成器,为什么不能在范围上调用next()?
也许我已经成为网络错误信息的受害者,但我认为更可能是我误解了一些信息。根据到目前为止的知识,range()是一个生成器,并且生成器可以用作迭代器。但是,此代码: myrange = range(10) print(next(myrange)) 给我这个错误: TypeError: 'range' object is not an iterator 我在这里想念什么?我期望它打印0,并前进到中的下一个值myrange。我是Python的新手,所以请接受我对这个基本问题的歉意,但在其他任何地方都找不到很好的解释。

9
什么时候不是使用python生成器的好时机?
这与您可以使用Python生成器函数做什么相反呢?:python生成器,生成器表达式和itertools模块是这些天我最喜欢的python功能。当设置操作链以对大量数据执行时,它们特别有用-我在处理DSV文件时经常使用它们。 那么什么时候不是使用生成器,生成器表达式或itertools函数的好时机? 我什么时候应该更喜欢zip()了itertools.izip(),或者 range()在xrange()或 [x for x in foo]结束了(x for x in foo)? 显然,我们最终需要通常通过创建列表或使用非生成器循环对其进行迭代来将生成器“解析”为实际数据。有时我们只需要知道长度即可。这不是我要的 我们使用生成器,以便我们不会将新列表分配到内存中以存储临时数据。这对于大型数据集尤其有意义。小型数据集也有意义吗?是否存在明显的内存/ CPU权衡? 考虑到列表理解性能与map()和filter()的令人大开眼界的讨论,如果有人对此进行了分析,我尤其感兴趣。(alt链接)

18
在迭代期间将元素添加到集合中
在迭代集合时是否可以向集合中添加元素? 更具体地说,我想遍历一个集合,如果一个元素满足特定条件,我想向集合中添加一些其他元素,并确保也对这些添加的元素进行遍历。(我意识到这可能会导致循环终止,但是我很确定不会发生这种情况。) Sun的Java教程建议不可能:“请注意,这Iterator.remove是在迭代过程中修改集合的唯一安全方法;如果在迭代过程中对基础集合进行了其他任何修改,则行为未指定。” 因此,如果我不能使用迭代器做我想做的事情,那么你建议我做些什么?
81 java  iterator 


4
python JSON仅在第一级获得键
我有一个非常长且复杂的json对象,但我只想在第一级获得项目/键! 例: { "1": "a", "3": "b", "8": { "12": "c", "25": "d" } } 我想得到1,3,8! 我发现以下代码: for key, value in data.iteritems(): print key, value 但它会打印所有键(以及12和25)

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.