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]]

9voto

Phrogz Punkte 283167

Hier sind zwei weitere Optionen für 1.8.6 (oder 1.9) ohne Verwendung von enumerator:

# Fun with functional
arr = ('a'..'g').to_a
arr.zip( (2..(arr.length+2)).to_a )
#=> [["a", 2], ["b", 3], ["c", 4], ["d", 5], ["e", 6], ["f", 7], ["g", 8]]

# The simplest
n = 1
arr.map{ |c| [c, n+=1 ] }
#=> [["a", 2], ["b", 3], ["c", 4], ["d", 5], ["e", 6], ["f", 7], ["g", 8]]

4voto

Automatico Punkte 11394

Eine lustige, aber nutzlose Art, dies zu tun:

az  = ('a'..'z').to_a
azz = az.map{|e| [e, az.index(e)+2]}

3voto

a = [1, 2, 3]
p [a, (2...a.size+2).to_a].transpose

2voto

Mo Wad Punkte 41
module Enumerable
  def map_with_index(&block)
    i = 0
    self.map { |val|
      val = block.call(val, i)
      i += 1
      val
    }
  end
end

["foo", "bar"].map_with_index {|item, index| [item, index] } => [["foo", 0], ["bar", 1]]

1voto

grandinero Punkte 1075

Ich mache das oft:

arr = ["a", "b", "c"]

(0...arr.length).map do |int|
  [arr[int], int + 2]
end

#=> [["a", 2], ["b", 3], ["c", 4]]

Anstatt direkt über die Elemente des Arrays zu iterieren, iterieren Sie über einen Bereich von Ganzzahlen und verwenden diese als Indizes, um die Elemente des Arrays abzurufen.

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