数组中第一个非零值的索引

时间:2010-06-05 03:55:34

标签: ruby

找到数组中第一个非零值的索引的最佳方法(在成语和效率方面)是什么?

我想出了first_non_null_index = array.index(array.dup.compact[0]) ......但是有更好的方法吗?

2 个答案:

答案 0 :(得分:6)

Ruby 1.9有find_index方法:

ruby-1.9.1-p378 > [nil, nil, false, 5, 10, 20].find_index { |x| not x.nil? } # detect false values
 => 2 
ruby-1.9.1-p378 > [nil, nil, false, 5, 10, 20].find_index { |x| x }
 => 3 
如果在早于1.8.7的Ruby中需要,{p> find_index似乎可以在backports中使用。

答案 1 :(得分:0)

我认为最好的答案只在于问题。 只有改变

first_non_null_index = (array.compact.empty?) "No 'Non null' value exist" :  array.index(array.dup.compact[0]

考虑以下示例

array = [nil, nil, nil,  nil,  nil]
first_non_null_index = array.index(array.dup.compact[0]) #this will return '0' which is wrong