407 Stimmen

Wie kann ich ein Element aus einem Array nach Wert löschen?

Ich habe ein Array von Elementen in Ruby

[2,4,6,3,8]

Ich muss Elemente mit Wert entfernen 3 zum Beispiel

Wie kann ich das tun?

8voto

Ankit Agrawal Punkte 99

Kompilieren aller verschiedenen Optionen für das Löschen in Ruby

löschen - Löscht übereinstimmende Elemente nach Wert. Wenn mehr als ein Wert übereinstimmt, werden alle gelöscht. Wenn Sie sich nicht um die Anzahl der Vorkommen kümmern oder sicher sind, dass nur ein einziges Vorkommen vorliegt, verwenden Sie diese Methode.

a = [2, 6, 3, 5, 3, 7]
a.delete(3)  # returns 3
puts a       # return [2, 6, 5, 7]

löschen_bei - Löscht das Element am angegebenen Index. Wenn Sie den Index kennen, verwenden Sie diese Methode.

# continuing from the above example
a.delete_at(2) # returns 5
puts a         # returns [2, 6, 7]

löschen_wenn - Löscht jedes Element, für das block wahr ist. Dadurch wird das Array verändert. Array ändert sich sofort, wenn der Block aufgerufen wird.

b = [1, 2, 5, 4, 9, 10, 11]
b.delete_if {|n| n >= 10}.  # returns [1, 2, 5, 4, 9]

zurückweisen - Es wird ein neues Array mit den Elementen zurückgegeben, für die der angegebene Block falsch ist. Die Reihenfolge wird dabei beibehalten.

c = [1, 2, 5, 4, 9, 10, 11]
c.reject {|n| n >= 10}.  # returns [1, 2, 5, 4, 9]

ablehnen! - gleich wie löschen_wenn . Array darf sich nicht sofort ändern, wenn der Block aufgerufen wird.

Wenn Sie mehrere Werte aus einem Array löschen möchten, ist die beste Option die folgende.

a = [2, 3, 7, 4, 6, 21, 13]
b = [7, 21]
a = a - b    # a - [2, 3, 4, 6, 13]

5voto

dgilperez Punkte 10318

Wenn Sie diese Löschoperation auch verkettbar machen wollen, so dass Sie ein Element löschen und weitere Operationen auf das resultierende Array verketten können, verwenden Sie tap :

[2, 4, 6, 3, 8].tap { |ary| ary.delete(3) }.count #=> 4

4voto

Lori Punkte 1350

Zerstörungsfreie Entfernung des ersten Vorkommens:

a = [2, 4, 6, 3, 8]
n = a.index 3
a.take(n)+a.drop(n+1)

3voto

Niels Kristian Punkte 8490

Sie können es auch mit einem Affen flicken. Ich habe nie verstanden, warum Ruby eine except Methode für Hash aber nicht für Array :

class Array
  def except value
    value = value.kind_of(Array) ? value : [value]
    self - value
  end
end

Das können Sie jetzt tun:

[1,3,7,"436",354,nil].except(354) #=> [1,3,7,"436",nil]

Oder:

[1,3,7,"436",354,nil].except([354, 1]) #=> [3,7,"436",nil]

3voto

Wenn Sie also mehrere Vorkommen von 3 haben und nur das erste Vorkommen von 3 löschen wollen, können Sie einfach etwas wie unten tun.

arr = [2, 4, 6, 3, 8, 10, 3, 12]

arr.delete_at arr.index 3

#This will modify arr as [2, 4, 6, 8, 10, 3, 12] where first occurrence of 3 is deleted. Returns the element deleted. In this case => 3.

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