代码之家  ›  专栏  ›  技术社区  ›  Aaron Yodaiken Stephen Chung

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

  •  3
  • Aaron Yodaiken Stephen Chung  · 技术社区  · 14 年前

    找到数组中第一个非零值的索引的最好方法是什么(从惯用语和效率两方面来说)?

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

    2 回复  |  直到 14 年前
        1
  •  6
  •   Mark Rushakoff    14 年前

    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 
    

    芬德指数 似乎在 backports 如果Ruby需要早于1.8.7。

        2
  •  0
  •   Salil    14 年前

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

    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