রুবিতে আমি যখন এটির পুনরুক্তি করছি তখন কীভাবে আমি একটি অ্যারে সংশোধন করব?


88

আমি যদি এখানে প্রায় নবাগত হয়ে থাকেন তবে আমি কেবল রুবিকে ক্ষমা চাইছি তবে পিকেক্স বইটি থেকে আমি এটি কাজ করতে পারি না (সম্ভবত কেবল যথেষ্ট যত্ন সহকারে পড়ছি না)। যাইহোক, যদি আমার মতো অ্যারে থাকে:

arr = [1,2,3,4,5]

... এবং আমি বলতে চাই, অ্যারেতে প্রতিটি মান 3 দ্বারা গুণিত করুন, আমি নিম্নলিখিতটি সম্পাদন করে কাজ করেছি:

arr.each {|item| item *= 3}

... আমি যা চাই তা পাবে না (এবং আমি বুঝতে পারি কেন, আমি নিজেই অ্যারে পরিবর্তন করছি না)।

আমি যা পাই না তা হ'ল পুনরায় কোডার পরে কোড ব্লকের ভিতরে থেকে মূল অ্যারেটি কীভাবে পরিবর্তন করা যায়। আমি নিশ্চিত এটি খুব সহজ।

উত্তর:


140

mapপুরানোটি থেকে একটি নতুন অ্যারে তৈরি করতে ব্যবহার করুন :

arr2 = arr.map {|item| item * 3}

map!জায়গায় অ্যারে পরিবর্তন করতে ব্যবহার করুন :

arr.map! {|item| item * 3}

এটি অনলাইনে কাজ করা দেখুন: আদর্শ one


4
আপনার যদি প্রতিটি উপাদানকে সত্যিই সংশোধন করতে হয় তবে মানচিত্রটি ব্যবহার করা অবশ্যই আরও মার্জিত হবে, তাই না।
fresskoma

4
এবং আপনি যদি অ্যারেটি পরিবর্তন করতে চান তবে নিজেই মানচিত্রটি ব্যবহার করুন! পরিবর্তে
Yoann লে Touche

18

অ্যারে সরাসরি পরিবর্তন করতে, ব্যবহার করুন arr.map! {|item| item*3}। মূল (যা প্রায়শই পছন্দনীয়) এর উপর ভিত্তি করে একটি নতুন অ্যারে তৈরি করতে ব্যবহার করুন arr.map {|item| item*3}। আসলে, আমি সবসময় ব্যবহার করার আগে আরেকবার ভেবে each, সাধারণত মত একটি উচ্চ-অর্ডার ফাংশন কারণ map, selectবা injectযে আমি কি চাই না।


আপনি যদি একটি গণনা ক্রিয়াকলাপ না করতে চান? আপনি যদি arr.map!{ destructive_op}স্থায়ীভাবে পরিবর্তনের মতো কিছু করতে চান তবে কী হবে arr?
উজ্জ্বল তারকা

4
@ ট্রেভর অ্যালেক্সান্দার: আপনার অর্থ কী তা আমি নিশ্চিত নই। এটি বিশদ এবং স্টাফ সহ একটি সত্য প্রশ্ন হিসাবে জিজ্ঞাসা মূল্য হতে পারে।
ছক

আমি এটি সম্পর্কে চিন্তা করতে হবে। খুব সংকীর্ণ উপাদান পরিবর্তন ছাড়াও, কাঠামোগুলিতে কোন ধ্বংসাত্মক ক্রিয়াকলাপগুলি গণনাযোগ্য নয়?
উজ্জ্বল তারকা

@ ট্রেভর অ্যালেক্সান্ডার: আমার এখনও বুঝতে খুব কঠিন সময় লাগছে। আপনি যদি কোনও কাঠামোর বিষয়বস্তু দেখতে না পারেন তবে আপনি এর বিষয়বস্তু রূপান্তর করতে পারবেন না। এ জাতীয় শোনার মতো আপনি কোনও কাঠামো পরিবর্তন করতে আগ্রহী নন এবং পরিবর্তে কেবল একটি ভেরিয়েবল বরাদ্দ করতে চান - তবে আমি ভুল বুঝাবুঝি হতে পারি।
ছক

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