2013-07-22 3 views
13

मेरे पास आइटमों की एक श्रृंखला है, और मुझे इसके पहले x आइटम को हटाने की आवश्यकता है। क्या ऐसा करने के लिए रूबी ऐरे कक्षा में एक अंतर्निहित कार्य है? मेरे पास एक खोज थी और केवल पाया गया, ऐसा करने के लिए अविश्वसनीय रूप से गन्दा या अक्षम तरीके जैसा दिखता था।किसी सरणी के पहले x entires को हटाएं

मैं चाहता हूँ अधिमानतः कुछ इस तरह की तरह:

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

उत्तर

36

मैं आइटम की एक सरणी है, और मैं इसके बारे में पहले एक्स आइटम हटाने के लिए की जरूरत है।

गैर विनाशकारी विलोपन

Array#drop(x) करने के लिए आप के लिए काम करेंगे।

आर्य से पहले तत्वों को छोड़ देता है और बाकी तत्वों को सरणी में वापस कर देता है। अगर ऋणात्मक संख्या दी जाती है, तो एक ArgumentError उठाता है।

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

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

विलोपन विनाशकारी करने के लिए

Array#shift

स्वयं के पहले तत्व निकालता है और यह रिटर्न (एक के बाद अन्य सभी तत्वों को नीचे स्थानांतरण)। सरणी खाली होने पर शून्य वापस आती है। अगर कोई संख्या n दी जाती है, तो पहले n तत्वों (या कम) की सरणी देता है जैसे array.slice! (0, n) करता है।

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

बिल्कुल सही, धन्यवाद। एसओ मुझे देता है जब मैं जवाब के रूप में इसे चिह्नित करेंगे। –

+1

महान उत्तर Arup! – narzero

3

के विनाशकारी करने के लिए अद्यतन my_items तुम कर सकते हो:

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

आह, तो टुकड़ा! सादा पुराना टुकड़ा उस तरह से काम करता है, धन्यवाद। –

+0

आपने जो अच्छा अवतार बनाया, मुझे यह पसंद आया। –

3

फिर भी एक और तरीका यह है: जो विशेष रूप से उपयोगी है Array#shift का उपयोग करें, जब आप मान से निकाल रहे हैं चाहते हैं सरणी के सामने।

a = (1..5).to_a 
a.shift(2) 
a # => [3, 4, 5] 
संबंधित मुद्दे