রুবি: অ্যারের থেকে প্রথম উপাদানটি সরানোর সহজতম উপায় কী?


257

বলি আমার একটা অ্যারে আছে

[0, 132, 432, 342, 234]

প্রথম উপাদানটি থেকে মুক্তি পাওয়ার সহজতম উপায় কী? (0)


1
'শিফট' হ'ল পপ এবং 'আনশিফ্ট' পুশ। কোন শিফটে পপ করতে পরামিতিগুলির সংখ্যা লাগে
অরুণ

উত্তর:


287

একটি অ্যারের প্রথম উপাদানকে "পপ" বলা হয় " শিফট " ("আনশিফ্ট" অ্যারের সামনে একটি উপাদান যুক্ত করার ক্রিয়াকলাপ)।


11
এটি অ্যারে রূপান্তর করে এবং nilএকটি খালি অ্যারেতে ফিরে আসে নোট করুন। dropঅন্যান্য উত্তরে উল্লিখিত বিকল্প হিসাবে দেখুন for
জে

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 26'15

7
+1 যেহেতু এটি পরিবর্তিত অ্যারে প্রদান করে, shiftসেখানে অ্যারেটি পরিবর্তিত করে স্থানান্তরিত উপাদানটি ফেরত দেয় (বা nilঅ্যারেটি খালি থাকলে)
যুবাল

305

shiftঅ্যারেতে পদ্ধতিটি ব্যবহার করুন

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

আপনি যদি এন প্রাথমিক উপাদানগুলি মুছতে চান তবে আপনি ব্যবহার করতে পারেন x.shift(n)


3
বিষয়বস্তু একই হওয়ায় ব্যাখ্যাটি সঠিক উত্তরে মার্জ করা উচিত
ইয়োলজি

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

সুতরাং বিপরীতে shiftবা sliceএটি পরিবর্তিত অ্যারে (এক লাইনের জন্য দরকারী) প্রদান করে।


12
এক নজর রাখতে হবে: অ্যারে খালি থাকলে এটি শূন্য হয়: [][1..-1] => nilএবং না []
মোহামাদ

2
নয় [1,2,3].shiftএক মাছ ধরার নৌকা?
thekingoftruth

4
@ থেকিংফট্রথ: হ্যাঁ, তবে আপনি যে উপাদানটি ফেলে দিয়েছিলেন তা মূল্যায়ন করে, বাকি অ্যারে নয়, তাই এটি অন্য একটি লাইন নেয় takes
নির্ভীক_ফুল

4
আমি এই উত্তরটি পছন্দ করি কারণ এটি এক লাইনের প্রকাশ যা আপনি যে কোনও জায়গায় ব্যবহার করতে পারেন। [] বনাম শূন্যতার সমস্যা এড়াতে, আপনি এটি করতে পারেন arry[1..-1] || []। তবে অ্যারি.ড্রপ (1) আরও ভাল।
নির্ভীক_ফুল

আমি এই কিউজটির সাথে যাচ্ছি এটি সহজ, আপনি কীভাবে "অ্যারে মাইনাসটি সরিয়ে নিয়েছেন" কীভাবে পাবেন, আমি কীভাবে কাজ করব তা দেখতে পাচ্ছি না ... এটিই মূল উত্তর তবে এটির উত্তর বলে মনে হচ্ছে না এই পরবর্তী পদক্ষেপটি কোনও নবজাতকের কাছে স্পষ্ট নয়!
লুই ম্যাডডক্স

99

এটি বেশ ঝরঝরে:

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

মন্তব্যে যেমন লেখা আছে, মূল তালিকাটি পরিবর্তন না করার একটি সুবিধা রয়েছে।


2
খুব চালাক, এবং পুরোপুরি কাজ করে। একবার আপনি এটি করার পরে, আপনার কাছে আপনার মাথাতে "মাথা" এবং "লেজ" উভয়ই চলক হবে।
nender21

3
এটি আমাকে প্রচুর স্মরণ করিয়ে দেয়। (let ((head (car mylist)) (tail (cdr mylist)) ...)
thekingoftruth

@ হুরিকান 77 ভাল লাগল! আমি চেষ্টা করে বোঝাতে চাইছি। হাস্কেল-তে দার্কস লেখা আছে তা জেনে আমার আগ্রহের বিষয়টিকে আরও বাড়িয়ে তুলতে সাহায্য করে।
thekingoftruth

6
এই সংস্করণটিতে মূল তালিকাটি পরিবর্তন করতে না
পারার সুবিধাও রয়েছে

2
কোনও অ্যাডিশনাল পদক্ষেপ ছাড়াই তথ্য বের করার সময় দরকারী header, *properties = CSV.read(file_path,encoding: 'ISO-8859-1')
জুলিয়ানগনজালেজ




4

আপনি অ্যারে.ডিলেট_ট (0) পদ্ধতিটি ব্যবহার করতে পারেন যা প্রথম উপাদানটি মুছবে।

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

আমি মনে করি না unless x.empty?প্রয়োজনীয়। nilসূচক সীমার বাইরে থাকলে এটি কেবল ফিরে আসে ।
tknomad

2

তুমি ব্যবহার করতে পার:

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

দু'জনেই কাজ করতে পারে


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.