Ruby: 1.8.7: Как мне найти индексы в массиве, где элементы не равны нулю? - PullRequest
3 голосов
/ 31 января 2011
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 |(е.ниль?)?nil: i} .compact

к сожалению, это работает только с 1.9

Ответы [ 2 ]

4 голосов
/ 31 января 2011

Это происходит с 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] 
2 голосов
/ 31 января 2011

Я уверен, что есть более быстрый путь, но:

result = []
my_array.each_with_index do |item, index|
  result << index unless item.nil?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...