রুবির অ্যারে # শিফট কী করে?


90

অ্যারে শ্রেণীর শিফট এবং আনশিফ্ট পদ্ধতি রুবিতে কী করে তা বুঝতে আমার খুব কষ্ট হচ্ছে। কেউ কি তারা আমাকে বুঝতে সাহায্য করতে পারে?


171
একবার অ্যারের অন্য প্রান্তের shift/unshiftমতো শিখলে আপনি push/popকোন 'ডাম্প' উপাদান এবং কোনটি 'সন্নিবেশ করায়' তা মনে রাখার জন্য পদ্ধতিগুলির নাম থেকে আপনি মানসিকভাবে 'চ' নামাতে পারেন। :)
ফ্রেগজ

4
ধন্যবাদ যে সত্যিই LOL সাহায্য করে।
এজেন্টবঙ্ক 217

অন্যতম সেরা মন্তব্য! আপনাকে অনেক ধন্যবাদ :)
TVdeyen

18
@ ফ্রোগজ আসলে, ভার্চেট্রেট হজম সিস্টেমগুলি স্ট্যাকের চেয়ে কাতারে মডেল করা ভাল।
জিয়ান

8
@ জিয়ান :) ঠিক: pushএটি শীর্ষে, এবং shiftএটি অন্য প্রান্তে বেরিয়েছে।
ফ্রেগজ

উত্তর:


99

রুবি ডকুমেন্টেশন তাকিয়ে

অ্যারে.শিফ্ট অ্যারে থেকে প্রথম উপাদানটি সরিয়ে আবার এটি প্রদান করে

a = [1,2,3] 
puts a.shift
 => 1 
puts a
 => [2, 3] 

আনশিফ্ট অ্যারের সামনের দিকে সরবরাহ করা মানটিকে অন্য সমস্ত উপাদানকে একটিতে সরিয়ে নিয়ে যায়

a=%w[b c d]
 => ["b", "c", "d"] 
a.unshift("a")
 => ["a", "b", "c", "d"] 

9
আপনি মূলত শিফট এবং আনশিফ্টকে ফিফোর কাতারে অপারেশন হিসাবে ভাবতে পারেন
জ্যাকো প্রিটোরিয়াস

@ জ্যাকোপ্রিটোরিয়াস হু? shiftএবং unshiftফিলো স্ট্যাকের মতো কাজ করুন pushএবং shiftফিফোর সারির মতো কাজ করব, যদি না আমি কিছু সম্পর্কে বিভ্রান্ত হই।
গ্রেগ স্মিট

@ গ্রেগস্কিমেট আহ, আপনি ঠিক বলেছেন বা আসলে, একটি লাইফের সারি, তাই না?
জ্যাকো প্রিটোরিয়াস 21

@ জ্যাকোপ্রিটোরিয়াস ওয়েল আমি মনে করি লিফো == ফিলো (সর্বশেষে বোঝা যাচ্ছে যে নিদর্শনটি ধরে রাখলে শেষেরটি অবশ্যই প্রথমে বের হওয়া উচিত)।
গ্রেগ স্মিট 21

@ জ্যাকোপ্রিটোরিয়াস লাইফ এবং ফিলো উভয়েরই অর্থ "স্ট্যাকের মতো আচরণ"।
গ্রেগ স্মিট 21

54

shiftএবং unshiftহিসাবে একই ভাবে কাজ করে popএবং pushতারা স্ট্যাকগুলি যার প্রতি তুমি সংযুক্ত করতে পারবেন এবং অপসারণ উপাদানের (সাধারণত সময় প্রতি এক) হিসাবে ব্যবহারের অ্যারে বোঝানো হয়। পার্থক্যটি কেবল এটিই shiftএবং unshiftশুরুতে উপাদানগুলি যুক্ত / সরিয়ে ফেলুন Array, আসলে অন্য সমস্ত উপাদানগুলিকে আইএনএসে স্থানান্তরিত করুন , popএবং pushশেষের দিকে উপাদানগুলি যুক্ত / সরান Array, যাতে অন্যান্য উপাদানগুলির সূচকগুলি সংরক্ষণ করে।

উদাহরণ:

                      # Spacing for clarity:
a = [2, 4, 8]    # a =>       [2, 4, 8]
a.push(16, 32)   # a =>       [2, 4, 8, 16, 32]
a.unshift(0, 1)  # a => [0, 1, 2, 4, 8, 16, 32]
a.shift          # a =>    [1, 2, 4, 8, 16, 32]
a.pop            # a =>    [1, 2, 4, 8, 16]

আপনি যদি মিপাডি থ্রেডের সংক্ষিপ্তসার করতে আপনার উত্তরটি সম্পাদনা করতে চান তবে আমি উত্সাহিত করতে পেরে খুশি হব।
স্টিভেন সুদিত

শীতল। এছাড়াও, আমি রুবি সম্পর্কে খুব জ্ঞানবান নই, তবে এটি যদি জেভিএমের উপরে চলে যায় তবে আমি প্রত্যাশা করব যে পুশ / পপটি দ্রুততর হবে, কারণ এই সমস্ত উপাদানগুলিকে সরিয়ে নিতে হবে না।
স্টিভেন সুদিত

স্ট্যাক সাদৃশ্যটির জন্য আপভোট করুন, তবে পাইপগুলিও ভাবেন। যেহেতু আমাদের প্রোগ্রামার হওয়ার কথা রয়েছে সেহেতু আমাদেরও ভাবতে হবে শিফটটি একটি শিফট-বাম এবং আনশিফ্ট একটি অনুভূমিক বাম থেকে ডান অ্যারেতে একটি শিফট-ডান।
ম্যাকেনজম

8

এটি প্রথম উপাদানটি ধরে, অ্যারে থেকে সরিয়ে দেয় এবং মুছে ফেলা উপাদানটিকে ফেরত দেয়। এটি স্ট্যাকের মতো অ্যারের সাথে আচরণ করার একটি উপায়: shiftপপ হয়, unshiftপুশ হয়।


8
ওয়েল শিফট এবং আনশিফ্ট পপ এবং পুশের সমান , এগুলি শেষের পরিবর্তে অ্যারের শুরু থেকে স্টাফ যুক্ত করে এবং সরিয়ে দেয়।
আলবার্তো শান্তিনি

4
এই উত্তরটি ঠিক বিমূর্ততার সঠিক স্তর।
স্টিভেন সুদিত

@ অ্যালবার্তো: বা অন্য কথায়, তারা সামনেটিকে শীর্ষ বলে মনে করে। অন্যথায় এটির জন্য কোনও প্রয়োজন নেই।
স্টিভেন সুদিত

4
আমি কেবল এটি নির্দেশ করছিলাম যেহেতু popএবং pushএটিও Arrayপদ্ধতি, বিভ্রান্তি তৈরি করা উচিত নয়। :-)
আলবার্তো শান্তিনি

4
@ অ্যালবার্তো: এটি আসলে একটি ভাল বিষয়। শিফ্ট / আনশিফ্ট পদ্ধতিগুলি সামনের দিকে শীর্ষ হিসাবে ব্যবহার করে যখন পুশ / পপ পদ্ধতিগুলি শীর্ষটিকে শেষ হিসাবে ব্যবহার করে। তারা উভয়ই অ্যারেটিকে স্ট্যাক হিসাবে বিবেচনা করে, কেবলমাত্র তারা শেষ পর্যন্ত ব্যবহার করে f
স্টিভেন সুদিত

2

যদি আপনি অ্যারেটিকে প্রক্রিয়াজাতকরণের মানগুলির একটি সারি হিসাবে মনে করতে পারেন তবে আপনি পরবর্তী স্থান (সামনের) মান নিতে পারেন এবং উপলব্ধ স্থানটি দখল করতে অন্য মূল্যকে "শিফট" করতে পারেন। আনশিফ্ট মানগুলিকে ফিরিয়ে দেয় - সম্ভবত আপনি সেগুলির কয়েকটি প্রসেস করতে প্রস্তুত নন, বা পরে কিছু কোড তাদের পরিচালনা করতে দেবে।


1

এটা তোলে অ্যারের প্রথম উপাদান ফেরৎ, এবং, অ্যারে থেকে সরিয়ে ফেলা হবে নাড়াচাড়া উপাদান এক জায়গায় ফিরে।

তাই স্থানান্তরিত [1,2,3,4,5]

ফিরে আসে 1এবং অ্যারে সেট করে [2,3,4,5]

আরও এখানে

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