"iterate through"和"iterate over"哪个是正确的?与某个东西迭代有关吗?

83

我思考了一下,这两种说法有语义上的区别吗?还是我们可以自由选择?

编辑 我接受了@roygbivs的回答,因为大多数答案建议选择哪个是个人口味问题,并且它并不真正改变含义。在这种情况下,既然throughover都没有任何信息(在特定语境中),它们可以被省略。


6
我会说“迭代”,但英语不是我的母语。 - zneak
9
不需要使用“通过”或“结束”,这两个副词都是无用的。你只需要说“迭代”即可。“我正在编写代码迭代集合。”否则,这就像重复说明“迭代”的含义一样。 - user113476
介词在一般情况下并非无用的修饰语。请参阅https://english.stackexchange.com/q/23023/373969。 - Christophe
17个回答

82
“through”和“over”是无用的副词。
例如:
- 在迭代此集合时,我的代码会抛出错误。 - 此代码迭代了该集合。 - 你的任务是编写迭代该集合的代码。
这就像说“up north”或“down south”。 “up”和“down”是无用的。相反,您应该说:“我将在夏天去北方。”或“在南方,他们种棉花。”

9
我觉得它们更像介词而不是副词,但两者的定义似乎很灵活,取决于你如何解析句子。你是在简化一个短语动词吗?比如 "iterate over" 变成 "iterate"?或者你是把它作为一个不及物动词和一个介词来迭代,然后简化为及物动词? - Mark Canlas
7
正如马克指出的那样,“through”和“over”是介词。那么你该怎么说呢?你只是“迭代容器”吗?这个听起来不太对。 - Michael Aaron Safyan
1
@Michael,可能听起来不太正确,因为我们(集体)通常将iterate与throughover一起使用。Roy用方向上的updown给出了一个很好的例子。我曾经使用过iterate the list/controls,过了一段时间后,它感觉更自然,没有那么多无用的词汇。 - IAbstract
3
对我来说,“迭代某事”意味着“重复它”,它不适合作为“循环”它的同义词。另一方面,“迭代”或“遍历”在这个意义上通常被使用。 - ondra.cifka
确实,这个回答中的例句意味着重复收集,这并不是预期的含义,即使在语法上是正确的。请参阅https://english.stackexchange.com/q/23023/373969。 - Christophe

57

这不是对错问题,只是一些统计数据:

= term =           = Google =   = Github =
"iterate over"      1,440,000   10,569,846 search results
"iterate through"     908,000    5,605,973
"iterate thru"         44,200      141,982
——————————————————————————————————————————
"iterate on"          402,000      187,576
"iterate in"           63,300      117,962
"iterate across"       10,900      208,342
"iterate within"        8,470       14,577
"iterate along"         8,060        6,396
"iterate among"         5,970        2,960
"iterate against"       2,580        3,255
"iterate inside"        2,450       35,060
"iterate amongst"         406       22,274
"iterate amidst"           66            0

Google统计数据更新至2018年4月25日。后续搜索结果可能不稳定。
Github统计数据更新至2018年4月25日。仅计算代码出现次数。


有趣的答案,我不知道Google提供这样好的报告,如何像这样在Google上搜索? - Lucas Pires
4
@LucasPires 这是手动组装的。 - kennytm

18

我认为这取决于介词的对象;当你遍历一个iterator(迭代器)时,使用“over”,当你遍历collection(集合)、container(容器)、list(列表)、range(范围)时也使用“over”,但是当你遍历list(列表)的内容、container(容器)的元素、range(范围)的元素、collection(集合)的元素时却使用“through”。在几乎所有情况下它们是可以互换的;唯一我会使用“over”但不使用“through”的地方就是针对iterator本身;但对于任何可迭代的对象,我都会使用“over”或“through”。


1
这个区别听起来最好。顺便说一下,“over”听起来更肤浅,就像你是一个外部的消费者。但“through”的感觉更亲密、更私人。就像你可能是实现者,写枚举器。 - Mark Canlas
1
作为一个以英语为母语的人,我在遍历列表、范围或集合时没有任何问题。事实上,“通过迭代”对我的听觉总是不自然的。@Mark,迭代本质上是外部的定义,所以始终使用 over 是最好的选择。 - jmucchiello
@jmucchiello,我认为我们有一些误解;请注意我写的是“遍历范围”和“遍历(范围内的)元素”。我同意“over”听起来更自然,但我认为“through”在大多数情况下听起来也不错,除了迭代器本身,此时“through”比“over”更加尴尬。 - Michael Aaron Safyan
我认为Mark说得对。Over是指外部,而Through则听起来是指内部。我的问题是我不认为迭代器曾经在内部,因此从未认为Through是正确的,即使在您的实例Michael中也是如此。如果我有一组汽车,我会遍历这组汽车。我不会说“我遍历容器中的汽车”,或者遍历容器中的汽车元素,或者遍历容器中的汽车范围。这些听起来都不好。 - jmucchiello

16

我的建议是使用“迭代”,这也是我一直见到的写法。


6
然而,在谷歌中,“迭代整个集合”比“通过”和没有介词的短语都要多得多的结果... - Timwi

7

两者基本上意思相同!

因此,可以自由选择任何一个适合自己的。


3
我总是说“迭代”,因为它强调了迭代器本身并不包含在迭代的容器中,这是一个相对重要的事实。
对我来说,“迭代通过”意味着逐个查看容器中的每个元素,这不是真正发生的事情。
相反,说“迭代过”对我来说意味着接收到每个元素的外部句柄,这确实是正在发生的事情。
然而,“迭代通过”并没有什么问题,任何了解迭代器的人都肯定会理解这两个短语。

1

从技术上讲,这可能只是一个“迭代”周期。但无论哪种情况,你的意思都很明显。


1

我使用“循环”。很简单。


1

System.Collections.Generic.IEnumerator GetEnumerator() 的摘要文本如下:

返回一个枚举器,用于遍历集合。

个人认为应该使用 through... 但实际上我认为使用哪个都无所谓。


0

有一种更好的方法。

J's members are dissimilar, but all can be incremented.
Having incremented every member of 'J' ...
J contains incrementable elements.
J refers to several items.
J refrances several items.
Everything in J is incrementable.
Everything J refers to should necessarily be thought of as being storable in a set.
Sequentially referring to J's contents ...
Apply between each element of J and R until all possible compatible pairs have been found.
Ask J using it's 'ask' function to sequentially apply addition between it's contents and return the result.

这就像单词“has”一样,经常可以将整个句子简化为一个单词。

为什么不保持迭代,例如 -> 圆形、三角形、八边形、五边形、六边形。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接