使用 step 循环遍历数组

Posted

技术标签:

【中文标题】使用 step 循环遍历数组【英文标题】:Looping through an array with step 【发布时间】:2012-10-12 21:00:49 【问题描述】:

我想查看数组中的每个第 n 个元素。在 C++ 中,我会这样做:

for(int x = 0; x<cx; x+=n)
    value_i_care_about = array[x];
    //do something with the value I care about.  

我想在 Ruby 中做同样的事情,但找不到“步进”的方法。 while 循环可以完成这项工作,但我发现在已知大小的情况下使用它令人反感,并希望有更好(更多 Ruby)的方式来执行此操作。

【问题讨论】:

找不到有关该步骤的任何信息 本杰明的回答不正确。你应该看看李维斯或大卫的答案。 是的,1.step(3, 2) 给出 1 和 3 是有道理的。在这段代码中,步长为 2,因此第二个元素被跳过。剩下的是 1 和 3。 是的,我知道它现在是如何工作的了。谢谢大家。 顺便说一句,这与Rails无关,是一个Ruby问题。 【参考方案1】:

怎么样:

> [1, 2, 3, 4, 5, 6, 7].select.each_with_index  |_,i| i % 2 == 0 
=> [1, 3, 5, 7]

迭代器的链接非常有用。

【讨论】:

嗯,也许,但在这种情况下完全没有必要。只需使用 select 的块形式:[1, 2, 3, 4, 5, 6, 7].select(&amp;:odd?)【参考方案2】:

只需使用 Range 类中的 step() 方法,该方法返回一个枚举器

(1..10).step(2) |x| puts x

【讨论】:

不错。不喜欢创建一百万个范围的想法,而 int 可以在 c++ 中完成这项工作。但是很酷【参考方案3】:
class Array
def step(interval, &block)
    ((interval -1)...self.length).step(interval) do |value|
        block.call(self[value])
    end
end
end

您可以将方法添加到类数组中

【讨论】:

【参考方案4】:

范围有一个 step 方法,您可以使用它来跳过索引:

(0..array.length - 1).step(2).each do |index|
  value_you_care_about = array[index]
end

或者,如果您喜欢使用带有范围的 ...,以下内容会更简洁:

(0...array.length).step(2).each do |index|
  value_you_care_about = array[index]
end

【讨论】:

你可以用(0...array.length)代替(0..array.length - 1)【参考方案5】:
array.each_slice(n) do |e, *_|
  value_i_care_about = e
end

【讨论】:

【参考方案6】:

我们可以在每次迭代时跳过一系列数字进行迭代,例如:

1.step(10, 2)  |i| print "#i "

http://www.skorks.com/2009/09/a-wealth-of-ruby-loops-and-iterators/

比如:

array.step(n) do |element|
  # process element
end

【讨论】:

您错过了有关该步骤的信息。这是最重要的一点。 今晚感觉有点不舒服=D 这不起作用。 Array 没有 step 方法,因此您将获得“未定义的步骤方法”。 1.step(10,2) 确实有效,但不会遍历数组。李维答对了。 是的.. 但在 Ben 的防守中.. 就足够了。 Levi's 也不会遍历数组。两个很好的答案。【参考方案7】:

这是使用模运算符%的一个很好的例子

当您掌握了这个概念后,您可以将它应用到大量不同的编程语言中,而无需深入了解它们。

step = 2
["1st","2nd","3rd","4th","5th","6th"].each_with_index do |element, index|
  puts element if index % step == 1
end

#=> "2nd"
#=> "4th"
#=> "6th"

【讨论】:

不得不投票给你...如果 n 是 1000,那么我有 10000 个元素,我刚刚完成了 10000 个元素,如果我不需要获得 10 个元素。 我只是想知道为什么它被否决了。谢谢你告诉我 当然你说得对。负面影响越大,您的步长越大。如果您像我刚才一样对此感到好奇,请参阅以下要点中的重要基准测试结果:gist.github.com/3936015 优秀的搜索戴夫。每当比较在循环中时,它每次都会运行..如果你可以让 if's out of your loop 它运行得更快。我喜欢看我的周期,让....自己照顾他们。 那么,我将把我的ifs 替换为unless... jk ;)

以上是关于使用 step 循环遍历数组的主要内容,如果未能解决你的问题,请参考以下文章

JS数组循环遍历常用的9种方法

js 循环遍历变量的几种方式

jquery数组封装使用方法分享(jquery数组遍历)

PHP数组循环?

C语言,怎么利用一个循环遍历一个二维数组呀?急!!!

怎么用一个循环遍历二维数组?