my_array = [0, 1, 2, nil, nil, 3, nil, 4, nil]
应该返回[0,1,2,5,7]
通过@the tin man:state.map.with_index {| e,i | (e.nil?)? nil:i} .compact
不幸的是,这只适用于1.9
答案 0 :(得分:4)
这与v1.9.2:
有关my_array.map.with_index{ |e,i| (e.nil?) ? i : nil }.compact
=> [3, 4, 6, 8]
在我回答时问题发生了变化,所以这与现在的问题相符:
my_array.map.with_index{ |e,i| (e.nil?) ? nil : i }.compact
=> [0, 1, 2, 5, 7]
这只是切换三元运算符值的情况。
而且,问题又一次改变了。 1.8.7和1.9.2:
ruby-1.8.7-p330 :004 > my_array.each_with_index.map{|e,i| (e.nil?) ? nil : i }.compact
=> [0, 1, 2, 5, 7]
ruby-1.9.2-p136 :002 > my_array.each_with_index.map{|e,i| (e.nil?) ? nil : i }.compact
=> [0, 1, 2, 5, 7]
答案 1 :(得分:2)
我确信有更快捷的方式,但是:
result = []
my_array.each_with_index do |item, index|
result << index unless item.nil?
end