查找满足条件的数组元素的索引

时间:2017-05-30 06:36:36

标签: ruby

我有一个数组,我需要一个满足特定条件的原始数组元素的下标数组。

map没有做,因为它产生了一个相同大小的数组。 select没有做,因为它产生对单个数组元素的引用,而不是它们的索引。我提出了以下解决方案:

my_array.map.with_index {|elem,i| cond(elem) ? i : nil}.compact

如果数组很大并且只有少数元素满足条件,则另一种可能是

index_array=[]
my_array.each_with_index {|elem,i| index_array << i if cond(elem)}

两者都有效,但有没有更简单的方法?

3 个答案:

答案 0 :(得分:4)

不,没有任何内置或更简单的东西。

变异:

my_array.each_with_index.with_object([]) do |(elem, idx), indices|
  indices << idx if cond(elem)
end

答案 1 :(得分:3)

另一种可能的选择:

my_array.select.with_index {|elem, _| cond(elem) }.map(&:last)

答案 2 :(得分:2)

您可以将Array#each_index与选择

一起使用
arr = [1, 2, 3, 4]
arr.each_index.select {|i| arr[i].odd? }
# => [0, 2]