индекс первого ненулевого значения в массиве - PullRequest
3 голосов
/ 05 июня 2010

Каков наилучший способ (с точки зрения идиомы и эффективности) найти индекс первого значения, не равного нулю, в массиве?

Я придумал first_non_null_index = array.index(array.dup.compact[0]) ... но есть ли лучший способ?

Ответы [ 2 ]

6 голосов
/ 05 июня 2010

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 

find_index представляется доступным в backports при необходимости в Ruby ранее, чем 1.8.7.

0 голосов
/ 05 июня 2010

Я думаю, что лучший ответ только на вопрос. Только изменить

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...