Questions tagged «loops»

循环是一系列语句,仅指定一次,但可以连续执行多次。


8
为什么在Web编程中接受轮询?
我目前正在研究一个Ruby on Rails项目,该项目显示图像列表。 该项目的必备条件是它可以实时显示新帖子,而无需刷新网页。经过一段时间的搜索,我偶然发现了一些JavaScript解决方案和服务,例如PubNub;但是,所有提供的解决方案都没有道理。 在JavaScript解决方案(polling)中,会发生以下情况: 用户1查看照片列表。 JavaScript后台在后台每秒轮询一次端点,以查看是否有新帖子。 用户2添加了新照片。 在触发新周期并获取新数据之前,存在50 ms的延迟。 新内容已加载到DOM中。 当转换为真实示例时,这似乎很奇怪: 用户1在他/她的桌子上拿着一堆照片。 他/她每秒走到摄影师那里,问他是否有新摄影师。 摄影师拍了一张新照片。 当他/她走进来的那一秒钟,她可以拍照并将其放在桩上。 我认为解决方案应如下: 用户1在他/她的桌子上拿着一堆照片。 摄影师拍摄了一张新照片。 摄影师走到那堆,其余的放在一起。 PubNub解决方案基本相同,但是这次双方之间有一个实习生步行以共享数据。 不用说,这两种解决方案都非常耗能,因为即使没有数据要加载,它们也会被触发。 据我所知,没有(逻辑)解释为什么几乎在每个实时应用程序中都使用这种实现方式。
108 loops  logic  polling 

3
我如何摆脱“循环”思想流派?
这是一个相当概念性的问题,但是我希望我能对此得到一些好的建议。我做的很多编程工作都是使用(NumPy)数组。我经常必须匹配大小不同的两个或多个数组中的项,而我要去的第一件事是一个for循环,甚至更糟的是嵌套的for循环。我想尽可能避免for循环,因为它们很慢(至少在Python中如此)。 我知道NumPy的很多功能都需要我研究一些预定义的命令,但是当您必须迭代某些内容时,您(作为经验丰富的程序员)是否会想到一个一般的思考过程? 所以我经常有这样的事情,这很糟糕,我想避免它: small_array = np.array(["one", "two"]) big_array = np.array(["one", "two", "three", "one"]) for i in range(len(small_array)): for p in range(len(big_array)): if small_array[i] == big_array[p]: print "This item is matched: ", small_array[i] 我知道有多种方法可以实现这一目标,但是我对通用的思维方法(如果存在)感兴趣。
79 python  array  loops 

17
如何编写正确的循环?
大多数时候,在编写循环时,我通常会写错边界条件(例如:错误的结果),或者我对循环终止的假设是错误的(例如:无限运行的循环)。尽管经过反复尝试后我的假设是正确的,但是由于头脑中缺乏正确的计算模型,我感到非常沮丧。 /** * Inserts the given value in proper position in the sorted subarray i.e. * array[0...rightIndex] is the sorted subarray, on inserting a new value * our new sorted subarray becomes array[0...rightIndex+1]. * @param array The whole array whose initial elements [0...rightIndex] are * sorted. * @param rightIndex The …

6
谁创造了第一个循环结构的想法?
while (1) { if (1+1==2) { print "Yes, you paid attention in Preschool!"; } else { print "Wait... I thought 1+1=2"; } } 作为开发人员,我们所有人都必须非常频繁地使用循环。我们知道。我想知道的是,谁想到这个主意是循环的?循环引入什么语言?什么是第一个循环结构?是while循环吗?一个for循环?等等?
53 history  loops 

7
为什么分号和逗号在for循环中互换?
在许多语言中(从C到JavaScript的广泛列表): 逗号,分隔参数(例如func(a, b, c)),而 分号;分隔顺序指令(例如instruction1; instruction2; instruction3)。 那么,为什么要使用相同的for循环语言来反转此映射: for ( init1, init2; condition; inc1, inc2 ) { instruction1; instruction2; } 而不是(对我来说似乎更自然) for ( init1; init2, condition, inc1; inc2 ) { instruction1; instruction2; } ? 当然,for(通常)不是一个函数,但是参数(即init,condition,increment)的行为更像指令序列的函数的参数。 是由于历史原因/惯例造成的,还是in ,和;in循环互换的合理依据?

16
在for循环内,如果可能,是否应该将中断条件移到条件字段中?[关闭]
有时我需要循环,需要这样的中断: for(int i=0;i<array.length;i++){ //some other code if(condition){ break; } } 我对写作感到不舒服 if(condition){ break; } 因为它消耗3行代码。我发现循环可以重写为: ↓ for(int i=0;i<array.length && !condition;i++){ //some other code } 所以我的问题是,如果可能的话,将条件移至条件字段以减少代码行是否是一种好习惯?


6
为什么嵌套循环被认为是不好的做法?
我的讲师今天提到,可以在Java中“标记”循环,以便在处理嵌套循环时可以引用它们。因此,我在不了解该功能的情况下查找了该功能,并在很多地方对该功能进行了解释,然后警告并阻止嵌套循环。 我真的不明白为什么吗?是否因为它影响代码的可读性?还是更具“技术性”?

2
使用where条件vs Continue保护子句过滤foreach循环
我已经看到一些程序员使用此: foreach (var item in items) { if (item.Field != null) continue; if (item.State != ItemStates.Deleted) continue; // code } 而不是我通常使用的位置: foreach (var item in items.Where(i => i.Field != null && i.State != ItemStates.Deleted)) { // code } 我什至看到了两者的结合。我真的很喜欢“继续”的可读性,尤其是在更复杂的条件下。性能上甚至有差异吗?通过数据库查询,我假设会有。常规列表呢?

8
在什么时候禁忌在循环中循环?
只是好奇。我曾经遇到过的最多的是for循环中的for循环,因为从Linus Torvalds读取以下内容后: 制表符是8个字符,因此缩进也是8个字符。有些异端运动试图使缩进量增加4个(甚至2个!)字符,这类似于试图将PI的值定义为3。 原理:缩进的整个思想是明确定义控制块的开始和结束位置。尤其是当您连续20个小时查看屏幕时,如果压痕较大,则发现压痕的工作原理要容易得多。 现在,有些人会声称具有8个字符的缩进会使代码向右移得太远,并使得在80个字符的终端屏幕上难以阅读。 答案是,如果您需要三个以上的缩进级别,那么无论如何您都会被搞砸,应该修复程序。 https://www.kernel.org/doc/Documentation/CodingStyle 我认为进入第三层循环对我来说是不可接受的做法,并且会重组我的代码(Primally Qt)。 莱纳斯在开玩笑吗? 是否取决于语言或应用程序? 是否有某些事情绝对需要三级或更多级循环?

2
将循环(while / for)转换为递归或从递归转换为循环的一般方法?
这个问题主要集中在算法上,也许是抽象的并且更学术化。 这个例子提供了一个想法,我想用一种通用的方式,所以例子仅用于使我们更清楚地了解您的想法。 一般来说,循环可以转换为递归的。 例如: for(int i=1;i<=100;++i){sum+=i;} 其相关的递归为: int GetTotal(int number) { if (number==1) return 1; //The end number return number+GetTotal(number-1); //The inner recursive } 最后,为了简化此过程,需要执行尾递归: int GetTotal (int number, int sum) { if(number==1) return sum; return GetTotal(number-1,sum+number); } 但是,大多数情况下都不容易回答和分析。我想知道的是: 1)我们能否获得一种“通用方式”将循环(for / while……)转换为递归?在进行转换时,我们应该注意哪些事情?最好写一些示例的详细信息以及您的persudo理论以及转换过程。 2)“递归”具有两种形式:线性递归和尾递归。那么哪个转换更好呢?我们应该掌握什么“规则”? 3)有时我们需要保留递归的“历史”,这很容易在循环语句中完成: 例如: List<string> history = new List<string>(); …

6
带中断/返回的Foreach循环与带显式不变和后置条件的while循环
这是检查值是否在数组中的最流行的方法(在我看来): for (int x : array) { if (x == value) return true; } return false; 但是,在我也许是Wirth或Dijkstra读过的一本书中,据说这种风格更好(与内部退出的while循环相比): int i = 0; while (i < array.length && array[i] != value) i++; return i < array.length; 这样,附加的退出条件就成为循环不变式的显式部分,没有隐藏的条件,并且在循环内退出,一切都变得更加明显,并且结构化编程的方式更加明显。我通常优选后者的图案尽可能和所使用的for从-loop只迭代a到b。 但是我不能说第一个版本不太清楚。至少对于初学者来说,它甚至更清晰,更容易理解。所以我仍然在问自己一个问题哪个更好? 也许有人可以对其中一种方法给出很好的理由? 更新:这不是多个函数返回点,lambda或本身在数组中查找元素的问题。这是关于如何编写具有比单个不等式更复杂的不变式的循环。 更新:好的,我看到回答和评论的人的观点:我在这里混入了foreach循环,它本身已经比while循环更加清晰易读。我不应该那样做。但这也是一个有趣的问题,因此我们将其保留为:foreach循环和内部一个额外条件,或者while循环具有一个显式循环不变性和after后置条件。看来带有条件和退出/中断的foreach循环是成功的。我将创建一个没有foreach循环的附加问题(用于链接列表)。

1
什么是灌注泵?有时称为预读
过去,我已经学会了这种表达方式和模式。当然,这个名字来自于那些老式泵,在泵水之前必须先注满水,但是谁在乎呢?我们在这里谈论代码。 我们将欢迎您提供一些非常好的示例,并对模式的完成情况进行解释。今天如何看待这种模式? 灌注有时会导致有缺陷的循环工作,但要付出DRY的代价。因此,这可能是短暂停止更好设计的途中。这被认为是反模式吗?有其他选择吗?

7
在使用整数(例如在For循环中)时是否应避免<=和> =?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 我已经向我的学生解释说,等于测试对于浮点变量并不可靠,但对于整数则可以。我使用的教科书说&gt;和&lt;比&gt; =和&lt;=更容易阅读。我在某种程度上同意,但是在For循环中?让循环指定开始和结束值是否更清晰? 我是否缺少教科书作者正确的东西? 另一个示例在范围测试中,例如: 如果分数&gt; 89等级='A' 否则,如果分数&gt; 79等级='B'​​... 为什么不直接说:如果分数&gt; = 90?
15 loops 

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.