रूबी: किसी सरणी से पहला तत्व निकालने का सबसे आसान तरीका क्या है?


257

आइए बताते हैं कि मेरे पास एक सरणी है

[0, 132, 432, 342, 234]

पहले तत्व से छुटकारा पाने का सबसे आसान तरीका क्या है? (0)


1
'शिफ्ट' पॉप है और 'अनशिफ्ट' पुश है। जिसमें शिफ्ट पॉप करने के लिए मापदंडों की संख्या में ले जाता है
अरुण

जवाबों:


287

"पॉप" एक ऐरे के पहले तत्व को " शिफ्ट " कहते हैं ("अनशफ्ट" एरे के सामने एक तत्व को जोड़ने का ऑपरेशन)।


11
ध्यान दें कि यह सरणी को बदल देता है और nilखाली सरणी पर लौटता है । dropएक विकल्प के लिए देखें , जैसा कि अन्य उत्तर में बताया गया है।
जय

368
a = [0,1,2,3]

a.drop(1)
# => [1, 2, 3] 

a
# => [0,1,2,3]

इसके अलावा:

[0,1,2,3].drop(2)
=> [2, 3]

[0,1,2,3].drop(3)
=> [3] 

15
सबसे अच्छा उत्तर चूंकि (ए) छंटनी की गई सारणी का मूल्यांकन करता है, और यह एक खाली सरणी पर अपेक्षित रूप से काम करता है:[].drop(1) => []
निडर_फूल

4
इसके अलावा सबसे अच्छा जवाब क्योंकि ओपी ने कहा "पहले तत्व से छुटकारा पाने का सबसे आसान तरीका क्या है"
नोटा

4
यह उत्तर दिखाता है कि यह स्क्रॉल करने की सिफारिश की जाती है, भले ही पहले और अपवाद वाले उत्तर में पहले से ही 100 से अधिक upvotes हों। धन्यवाद।
maddin2code

7
+1 चूंकि यह एक संशोधित सरणी देता है, जबकि shiftस्थान में सरणी को बदल देता है और स्थानांतरित तत्व को लौटाता है (या nilयदि सरणी खाली था)
यूल

305

shiftसरणी पर विधि का उपयोग करें

>> x = [4,5,6]
=> [4, 5, 6]                                                            
>> x.shift 
=> 4
>> x                                                                    
=> [5, 6] 

यदि आप n शुरुआती तत्वों को हटाना चाहते हैं तो आप उपयोग कर सकते हैं x.shift(n)


3
स्पष्टीकरण को सही उत्तर में मिला दिया जाना चाहिए क्योंकि सामग्री समान है
यॉल्गी

129
[0, 132, 432, 342, 234][1..-1]
=> [132, 432, 342, 234]

तो इसके विपरीत shiftया sliceयह संशोधित सरणी (एक लाइनर्स के लिए उपयोगी) देता है।


12
एक के लिए बाहर देखने के लिए gotcha: अगर सरणी खाली है यह शून्य देता है: [][1..-1] => nilऔर नहीं []
मोहम्मद

2
नहीं है [1,2,3].shiftएक एक लाइनर?
०२:५० पर

4
@thekingoftruth: हाँ, लेकिन यह आपके द्वारा फेंके गए तत्व का मूल्यांकन करता है, बाकी सरणी का नहीं, इसलिए यह आपकी लाइन लेता है।
निडर_फूल

4
मुझे यह उत्तर पसंद है क्योंकि यह एक पंक्ति की अभिव्यक्ति है जिसे आप कहीं भी उपयोग कर सकते हैं। [] बनाम नील समस्या से बचने के लिए, आप कर सकते हैं arry[1..-1] || []। लेकिन arry.drop (1) और भी बेहतर है।
निर्भय_फूल

मैं इस cuz के साथ जा रहा हूं, यह सरल है, आप "सरणी माइनस को बाहर स्थानांतरित करने के लिए कैसे प्राप्त करेंगे", मैं यह नहीं देख सकता कि यह कैसे काम करेगा ... यह मुख्य उत्तर है, लेकिन यह उत्तर देने के लिए प्रतीत नहीं होता है सवाल चूंकि यह अगला कदम एक नौसिखिया के लिए स्पष्ट नहीं है!
लुई मैडॉक्स

99

यह बहुत साफ है:

head, *tail = [1, 2, 3, 4, 5]
#==> head = 1, tail = [2, 3, 4, 5]

जैसा कि टिप्पणियों में लिखा गया है, मूल सूची को न बदलने का एक फायदा है।


2
बहुत चालाक है, और पूरी तरह से काम करता है। एक बार ऐसा करने के बाद, आपके पास अपने निपटान में "सिर" और "पूंछ" दोनों चर होंगे।
nfriend21

3
यह मुझे बहुत कुछ याद दिलाता है। (let ((head (car mylist)) (tail (cdr mylist)) ...)
द विकिंगफ्ट्रूथ

@ हरिकानंद नाइस! मैं इसे एक कोशिश देने के लिए अर्थ रखता हूं। यह जानते हुए कि डार्क्स हास्केल में लिखा गया है, मेरी रुचि को कम करने में मदद करता है।
२०:२४ बजे ०३:२३

6
इस संस्करण में मूल सूची को
परिवर्तित

2
उपयोगी होने पर बिना किसी header, *properties = CSV.read(file_path,encoding: 'ISO-8859-1')
एडिशनल




4

आप Array.delete_at (0) विधि का उपयोग कर सकते हैं जो पहले तत्व को हटा देगा।

 x = [2,3,4,11,0]
 x.delete_at(0) unless x.empty? # [3,4,11,0]

मुझे नहीं लगता unless x.empty?कि आवश्यक है। nilयदि इंडेक्स सीमा से बाहर है तो यह आसानी से वापस आ जाता है।
तक्नोमद

2

आप उपयोग कर सकते हैं:

 a.delete(a[0])   
 a.delete_at 0

दोनों काम कर सकते हैं


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.