如何根据数组中特定的索引倍数进行选择

时间:2013-04-02 22:51:53

标签: ruby

这可能是非常基本的问题。

假设我有一个包含19个[0,1,2,3,4..19]项的数组。如何只选择索引计数为给定数字的倍数的那些,即2?

已更新:假设此代码适用于列。如何设置获得第一列的索引,并且所有索引都是多个索引?

4 个答案:

答案 0 :(得分:2)

选择给定数字的倍数的元素(如果元素等于索引,则有效):

ary.select { |element| element % 2 == 0 }

在这种特殊情况下,您还可以使用符号来处理:

ary.select &:even?

如果您的元素与索引不同,则成对分组为2并使用第一个元素:

ary.each_slice(2).map { |slice| slice[0] }

答案 1 :(得分:2)

结帐Enumerable#selectArray包括Enumerable)。你可以这样做:

1.9.3p392 :001 > a = [1,2,3,4,5,6]
 => [1, 2, 3, 4, 5, 6]
1.9.3p392 :002 > a.select {|n| n % 2 == 0}
 => [2, 4, 6]

select将过滤数组,挑选出块返回true的任何内容。在这种情况下,使用mod(%)运算符查找可被2整除的元素。

答案 2 :(得分:1)

如果我理解正确你想要只采用偶数指数。尝试使用each_index

arr = (0..19).to_a
arr.each_index { |x| puts arr[x] if x % 2 == 0 }

打印:

0
2
4
6
8
10
12
14
16
18

如果你想要数组的偶数元素,你也可以使用find_all

arr.find_all { |e| e.even? }

答案 3 :(得分:0)

(1..19).to_a.select{|e| e.%(2).zero?}

这比使用== 0略快。