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