我有一个数组,我需要一个满足特定条件的原始数组元素的下标数组。
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)}
两者都有效,但有没有更简单的方法?
答案 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]