2013-07-22 21 views
13

Bir dizi ürünüm var ve bunların ilk x öğelerini silmem gerekiyor. Bunu yapmak için Ruby Array sınıfında yerleşik bir işlev var mı? Etrafta bir arama yaptım ve sadece neye benzediğini, inanılmaz derecede dağınık ya da verimsiz yollar buldum.Bir dizinin ilk x girişini sil

Ben tercihen böyle bir şey gibi olurdu:

my_items = [ 'item1', 'item2', 'item3', 'item4' ] 
trimmed_items = my_items.delete(y, x) # deleting x entries from index y 

cevap

36

Ben öğelerin bir dizi var ve bunun ilk x öğeleri silmek gerekir. tahribatsız silinmesi

Array#drop(x) için

işi sizin için yapacaktır.

İlk n öğelerini ary'den bırakır ve öğelerin kalanını bir diziye döndürür. Negatif bir sayı verilirse, bir ArgumentError dosyasını yükseltir.

my_items = [ 'item1', 'item2', 'item3', 'item4' ] 
p my_items.drop(2) 
p my_items 

# >>["item3", "item4"] 
# >>["item1", "item2", "item3", "item4"] 

silme yıkıcı için

Array#shift

kendini ilk öğesini kaldırır ve (teker bütün diğer unsurları aşağı kayması) döndürür. Dizi boşsa nil döndürür. Eğer n sayısı verilirse, array.slice gibi ilk n elemanların (veya daha azının) bir dizisini döndürür (0, n).

my_items = [ 'item1', 'item2', 'item3', 'item4' ] 
my_items.shift(2) 
p my_items # => ["item3", "item4"] 
+1

Mükemmel, teşekkürler. SO bana izin verdiğinde bunu cevap olarak işaretleyeceğim. –

+1

Harika cevap Arup! – narzero

3

Yapabileceğin my_items güncellemek yıkıcı olarak için: Bunu gerçekleştirmek için

my_items.slice!(0, 2) 
# => ["item1", "item2"] 
my_items 
# => ["item3", "item4"] 
+0

Ah, bu yüzden dilim! Düz eski dilim üzerinde bu şekilde çalışır, teşekkürler. –

+0

Yaptığın güzel avatar, beğendim. –

3

Yine başka bir yol: Eğer gelen kaldırıyoruz değerleri istediğinizde özellikle yararlıdır, hangi Array#shift kullanmak dizinin önü.

a = (1..5).to_a 
a.shift(2) 
a # => [3, 4, 5]