来自其他语言,其中for循环是主要的迭代方式,我很好奇是否有更好的Ruby风格的方式来实现以下内容:
q=[5,1,7,9,0,3,6,8,0]
for i in 0..q.size/3-1
do one thing with q[0+i*3]
do another one with q[1+i*3]
third operation on q[2+i*3]
end
谢谢!
提交的有问题的代码实际上是可以工作的,但是知道Ruby中的for在引擎盖下使用了每一个,我不确定什么是使它更紧凑和高效的最佳方法。
2条答案
按热度按时间ctrmrzij1#
Ruby最常用的方法可能是使用
Enumerable#each_slice
:例如:
一般来说,在 any 程序中最重要的操作之一是“迭代内容”(或者更一般地说,遍历、转换、过滤、构建和折叠集合),在Ruby中,这是由
Enumerable
mixin处理的。学习和理解这个mixin的文档对于编写好的、地道的Ruby代码是至关重要的。作为一个(稍微夸张的)一般规则,如果你必须在Ruby中编写一个循环或手动摆弄索引或计数器,你很可能做错了什么。事实上,随着大多数现代编程语言所附带的强大算法、数据结构和集合库,这不仅适用于Ruby,而且几乎是普遍适用的。
n6lpvg4x2#
正如已经指出的,
each_slice
是这里的理想答案。然而,如果你纯粹对循环 * 数字索引 * 感兴趣,将你的代码转换成更符合Ruby习惯的东西,你可以使用范围和
step
以3为增量向前移动: