查找数组ruby中的元素索引

时间:2015-06-04 14:09:23

标签: arrays ruby

如何在ruby中找到数组中具有特定值的所有元素的索引?
即如果你有一个数组[2,3,52,2,4,1,2],有没有比使用循环更简单的方法来获取数组中所有2的索引?所以答案就像[0,3,6],如果我正在寻找2.
答案在 Get index of array element faster than O(n) 如果我想找到给定元素的一个实例,则给出解决方案。

5 个答案:

答案 0 :(得分:4)

也许你可以使用它:

a = [2, 3, 52, 2, 4, 1, 2]

b = a.map.with_index{|k, i| i if k == 2}.compact
b
# => [0,3,6]

或者,如果您想修改变量,请修改版本。

a = [2, 3, 52, 2, 4, 1, 2]
a.map!.with_index{|k, i| i if k == 2}.compact!
a
# => [0,3,6]

答案 1 :(得分:3)

试试这个,

arr = [2,3,52,2,4,1,2]
    output = []
    arr.each_with_index do |v,i|
       if v == 2
         output << i
       end
    end

puts output #=> [0, 3, 6]

答案 2 :(得分:2)

a
# => [2, 3, 52, 2, 4, 1, 2]
b = []
# => []
a.each_with_index{|i, ind| b << ind if i == 2}
# => [2, 3, 52, 2, 4, 1, 2] 

答案 3 :(得分:1)

a.each_with_object([]).find_all {|i, index| i == 2}.map {|i, index| index }

我觉得这仍然是一条捷径。

另一种选择可能是:

a.each_with_object([]).with_index {|(i, result), index| result << index if i == 2 }

答案 4 :(得分:1)

a = [2,3,52,2,4,1,2]

a.each_index.select { |i| a[i]== 2 }
  #=> [0, 3, 6]