2017-05-02 3 views
0

ruby​​クラスArrayにメソッドを追加したいと思います。 iterating中に配列とそのインデックスを参照することは可能ですか?反復処理中に配列内の要素のインデックスを取得するにはどうすればよいですか?

たとえば、配列の要素をインデックスとともに印刷するメソッドを作成したいとします。

array = [:a, :b, :c] 

array.print_elements_with_indexes 
# => a 1, b 2, c 3 
+0

は 'self.first'を置くか、' '[0]自己を置きます。 –

+0

@CarySwoveland最初の要素を印刷するのは単なる例です。その方法の解決には興味がありません。私は配列のインデックスを参照したい場合は、私は自己を使用するだろうか? – localplutonium

+4

配列は 'self'です。オフセット 'i'の配列の値は' self [i] 'です。オフセット 'i'で配列の値を変更する:' self [i] = 4'。配列 'self << 5'に' 5'を追加します。 'self.delete_at(i)'を実行すると、オフセット 'i'の要素が削除されます。それはあなたが求めていることですか? –

答えて

0
class Array 
    def print_first 
    puts first # same as `self.first`, or `self[0]` 
    end 
end 

[1, 2, 3, 4].print_first # prints 1 

あなたはインスタンスメソッドを定義し、クラスの範囲内であれば、メソッド呼び出しは、最初に、この場合にself.はオプションになりれ、selfに対して解決されます。

+0

最初の要素を印刷することに興味はありませんが、それは本当にその記事の読者にとっては難しいですか?私は配列索引を参照したいと思っています。 – localplutonium

+0

複数の人があなたの質問とあなたの例の両方を誤解しているので、あなたが意味するものを理解することは本当に難しかったです。あなたが探していた解決策を見た後、あなたの実際の質問によく合うように投稿した質問を編集します。 – Kache

1

self.<any-array-method>を使用できます。そのような方法の1つはsizeです。これを使用すると、各配列要素を繰り返し処理する範囲を作成できます。

class Array 
    def do_something 
    (0...self.size).each do |index| 
     puts "Index #{index} value is #{self.at(index)}" 
    end 
    end 
end 

[1, 2, 3, 4].do_something 

あるいは、以下に示すように、あなたもRubyのEnumerable#each_with_indexを使用することができます。

class Array 
    def do_something 
    self.each_with_index do |index, value| 
     puts "Index #{index} value is #{value}" 
    end 
    end 
end 

[1, 2, 3, 4].do_something 
+0

これは私が探している解決策です。私もstackoverflowの外でそれを考え出した – localplutonium

関連する問題