Ruby:1.8.7:如何在数组中找到元素不是nil的索引?

时间:2011-01-31 03:36:06

标签: ruby

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

2 个答案:

答案 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