找到数组中第一个非零值的索引的最佳方法(在成语和效率方面)是什么?
我想出了first_non_null_index = array.index(array.dup.compact[0])
......但是有更好的方法吗?
答案 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