2011-01-31 5 views
3
my_array = [0, 1, 2, nil, nil, 3, nil, 4, nil] 

@Theスズ男を経由して[0,1,2,5,7]Ruby:1.8.7:配列内の要素がnilでないインデックスを見つけるにはどうすればよいですか? | E、I state.map.with_indexを{|:

を返す必要があります(e.nil?)?ゼロ:I}だけ私は迅速な方法があります確信しているが、1.9

+0

私は、彼らが '何あなたのサンプルショーと一致していません – RichardTheKiwi

+0

あなたの質問のタイトルはnil are'場所を意味だと思います。あなたは「どのようにゼロ要素のインデックスを見つけるのですか? –

+0

笑、ありがとう、私は混乱してしまった。一定。 – NullVoxPopuli

答えて

4

これは、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] 

これは、3値演算子の値を切り替えた場合に過ぎません。

さらに、質問が変更されました。 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] 
+0

これは私が@dmarkowから学んだものよりも短いです。state.each_with_index {| item、index |残りの_moves << item.nil以外のインデックス? } – NullVoxPopuli

+0

ruby​​ 1.8.7でこれを行うにはどうすればよいですか? – NullVoxPopuli

+0

@Dernalia、追加された2つの例を参照 –

2

で動作することを、残念ながら

を.compact:

result = [] 
my_array.each_with_index do |item, index| 
    result << index unless item.nil? 
end 
関連する問題