2017-05-02 3 views
0

Ich möchte eine Methode zur Ruby-Klasse Array hinzufügen. Ist es möglich, während der Iteration auf das Array und seine Indizes zu verweisen?Wie erhalte ich den Index eines Elements während der Iteration in einem Array?

Zum Beispiel möchte ich eine Methode zum Drucken von Elementen des Arrays zusammen mit ihren Indizes erstellen.

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

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

'setzt self.first' oder' setzt sich [0] '. –

+0

@CarySwoveland Drucken des ersten Elements ist nur ein Beispiel. Ich bin nicht an einer Lösung für diese Methode interessiert. Also, wenn ich auf die Array-Indizes verweisen möchte, würde ich selbst verwenden? – localplutonium

+4

das Array ist "selbst". Der Wert des Arrays bei Offset "i" ist "self [i]". Um den Wert des Arrays bei Offset 'i' zu ändern:' self [i] = 4'. Um '5' zum Array 'self << 5 'hinzuzufügen. 'self.delete_at (i)' um das Element bei Offset 'i' zu entfernen. Ist das, was du fragst? –

Antwort

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 

Wenn Sie in den Rahmen einer Klasse sind, dann wird eine Instanzmethode, Methodenaufrufe definieren, zuerst gegen self, lösen, die die self. optional in diesem Fall macht.

+0

wieder im nicht daran interessiert, das erste Element zu drucken, ist es wirklich so schwer für die Leser der Post zu verstehen, dass ???????? Ich bin interessiert an REFERENCING DER ARRAY INDEXES. – localplutonium

+0

Es war in der Tat schwierig zu verstehen, was Sie meinten, da mehrere Menschen sowohl Ihre Frage als auch Ihr Beispiel missverstanden haben. Nachdem Sie die gesuchte Lösung gefunden haben, bearbeite ich Ihre gepostete Frage so, dass sie besser zu Ihrer eigentlichen Frage passt. – Kache

1

Sie können self.<any-array-method> verwenden und eine solche Methode ist size, mit der Sie einen Bereich erstellen können, der über alle Array-Elemente iteriert.

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 

Oder könnten Sie Rubys verwenden Enumerable#each_with_index auch wie unten dargestellt:

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

danke das ist die lösung ich suche. Ich habe es auch außerhalb des Stackoverflows herausgefunden – localplutonium

Verwandte Themen