2 Stimmen

Ein Ruby-Array indizieren, um ein Element oder einen Bereich von Elementen auszulassen?

Ich habe ein Ruby-Array von, sagen wir, 10 Elemente, und ich möchte alle außer dem 5. Element zurückgeben.

a = *(1..10)

Ich würde gerne etwas tun können wie

a[0..3 + 5..9]

Oder noch besser etwas wie (in Anlehnung an die R-Syntax),

a[-4]

um dies zu tun, aber das funktioniert nicht. (Noch tut etwas mehr clevere ich versucht habe, wie immer ein Array der Element-Indizes). Was ist der beste Weg, dies in Ruby zu tun?

5voto

Piotr Jakubowski Punkte 1712

Sie können verwenden values_at : http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-values_at

Sie können es also als

a.values_at(0..3, 5..9)

4voto

tokland Punkte 63238

Keine schwarze Magie erforderlich:

a[0..3] + a[5..9]

1voto

matt Punkte 481428

Schauen Sie in der Dokumentation unter Array#delete_at

Zum Beispiel, myarray.delete_at(5) führt dazu, dass im Array das Element 5 fehlt (natürlich von 0 an gerechnet).

Beispiel:

class Array
  def without(n)
    self.delete_at(n)
    return self
  end
end
arr = [1, 2, 3, 4]
p arr.without(1) #=> [1, 3, 4]

Wie ein Kommentator jedoch anmerkt, wird dadurch die ursprüngliche Anordnung verändert, was möglicherweise nicht im Sinne des O.P. ist! Wenn das ein Problem ist, schreiben Sie es so:

class Array
  def without(n)
    arr2 = Array.new(self)
    arr2.delete_at(n)
    return arr2
  end
end

Das gibt das gewünschte Array zurück (ein Array, dem das n-te Element des Originals fehlt), während das ursprüngliche Array unangetastet bleibt.

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