504 Stimmen

Wie map/collect mit Index in Ruby?

Wie kann ich am einfachsten konvertieren?

[x1, x2, x3, ... , xN]

zu

[[x1, 2], [x2, 3], [x3, 4], ... , [xN, N+1]]

924voto

sepp2k Punkte 352762

Wenn Sie Ruby 1.8.7 oder 1.9 verwenden, können Sie die Tatsache nutzen, dass Iteratormethoden wie each_with_index wenn sie ohne einen Block aufgerufen werden, ein Enumerator Objekt, das Sie aufrufen können Enumerable Methoden wie map an. Das können Sie tun:

arr.each_with_index.map { |x,i| [x, i+2] }

In 1.8.6 können Sie das tun:

require 'enumerator'
arr.enum_for(:each_with_index).map { |x,i| [x, i+2] }

304voto

tokland Punkte 63238

Ruby hat Aufzähler#mit_index(offset = 0) konvertieren Sie also zunächst das Array in einen Enumerator mit Objekt#zu_enum o Array#Map :

[:a, :b, :c].map.with_index(2).to_a
#=> [[:a, 2], [:b, 3], [:c, 4]]

201voto

fruqi Punkte 4367

In Ruby 1.9.3 gibt es eine verkettbare Methode namens with_index die mit map verkettet werden können.

Zum Beispiel:

array.map.with_index { |item, index| ... }

19voto

Andrew Grimm Punkte 73882

Übertriebene Vernebelung:

arr = ('a'..'g').to_a
indexes = arr.each_index.map(&2.method(:+))
arr.zip(indexes)

14voto

yburyug Punkte 1040

Die Syntax dieses Stils hat mir schon immer gefallen:

a = [1, 2, 3, 4]
a.each_with_index.map { |el, index| el + index }
# => [1, 3, 5, 7]

Aufrufen von each_with_index erhalten Sie einen Zähler, den Sie leicht mit Ihrem Index überlagern können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X