অ্যারে # প্রতিটি বনাম অ্যারে # মানচিত্র


92
hash = { "d" => [11, 22], "f" => [33, 44, 55] }

# case 1
hash.map {|k,vs| vs.map {|v| "#{k}:#{v}"}}.join(",")
=> "d:11,d:22,f:33,f:44,f:55"

# case 2
hash.map {|k,vs| vs.each {|v| "#{k}:#{v}"}}.join(",")
=> "11,22,33,44,55"

কেবলমাত্র পার্থক্য হ'ল কেস 1 ব্যবহার vs.map, কেস 2 ব্যবহার vs.each

সেখানে কি ঘটেছিল?

উত্তর:


174

Array#each অ্যারের প্রতিটি উপাদানের জন্য প্রদত্ত ব্লকটি কার্যকর করে, তারপরে অ্যারেটি নিজেই প্রদান করে।

Array#map অ্যারের প্রতিটি উপাদানের জন্য প্রদত্ত ব্লকটিও কার্যকর করে, তবে একটি নতুন অ্যারে প্রদান করে যার মানগুলি ব্লকের প্রতিটি পুনরাবৃত্তির ফেরত মান।

উদাহরণ: ধরে নিন আপনার এইরকম সংজ্ঞা দেওয়া হয়েছে:

arr = ["tokyo", "london", "rio"]

তারপরে কার্যকর করার চেষ্টা করুন each:

arr.each { |element| element.capitalize }
# => ["tokyo", "london", "rio"]

লক্ষ্য করুন যে রিটার্ন মানটি একই অ্যারে is eachব্লকের অভ্যন্তরীণ কোডটি কার্যকর হয়ে যায়, তবে গণনা করা মানগুলি ফেরত পাওয়া যায় না; এবং কোডটির কোনও পার্শ্ব প্রতিক্রিয়া নেই বলে এই উদাহরণটি কোনও কার্যকর কাজ করে না।

বিপরীতে, অ্যারের mapপদ্ধতিকে কল করা একটি নতুন অ্যারে প্রদান করে যার উপাদানগুলি mapব্লক সম্পাদন করার প্রতিটি রাউন্ডের রিটার্ন মানগুলি :

arr.map { |element| element.capitalize }
# => ["Tokyo", "London", "Rio"]

সঠিক উত্তর। মাত্র একটি .. অস্বীকৃতি: আপনি যদি মানচিত্রের ফাংশনের রিটার্ন মানকে অতিরিক্ত ব্যবহার করেন তবে আপনি সম্ভবত প্রচুর স্মৃতি নষ্ট করতে পারেন।
ইমরান আহমেদ

33

পার্শ্ব প্রতিক্রিয়া একই যা আপনার রিভার্স ইঞ্জিনিয়ারিং কিছু বিভ্রান্তির যোগ করা হয়।

হ্যাঁ, উভয় অ্যারেতে পুনরাবৃত্তি হয় (প্রকৃতপক্ষে, কিছু পরিমাণে মিশে যায় এমন ক্ষেত্রে ) তবে মানচিত্রটি ব্লকের ফলাফলের সমন্বিত একটি অ্যারে প্রদান করবে যখন প্রত্যেকে কেবল আসল অ্যারেটি ফিরিয়ে দেবে।

ফেরত মান প্রতিটি মাত্র মূল অ্যারের এবং খুব কমই রুবি কোডে ব্যবহৃত হয় কিন্তু মানচিত্র অন্যতম সবচেয়ে গুরুত্বপূর্ণ ক্রিয়ামূলক সরঞ্জাম

কী mapকরে এমন একটি অ্যারে ফিরিয়ে আনা হয় যাতে এতে ব্লকের ফলাফল বা পাস করা নামকরণ পদ্ধতি রয়েছে। উদাহরণ স্বরূপ:

    2.2.3 :001 > [:how, :now, :brown, :cow].map &:to_s
 => ["how", "now", "brown", "cow"]

এই ক্ষেত্রে আমি একটি ব্লক পাস করি নি তবে কেবল একটি Symbol, তবে class Symbolঅবজেক্টগুলির একটি to_procপদ্ধতি রয়েছে যার ফলস্বরূপ হবে:

[:how.to_s, :now.to_s, ...]

BTW, আপনি ডকুমেন্টেশন খোঁজার কারণ একটি কঠিন সময় থাকার করা যেতে পারে মানচিত্র মধ্যে একটি পদ্ধতি গণনীয় সময় প্রতিটি (এক পদ্ধতি দ্বারা প্রয়োজনীয় গণনীয় মডিউল) একটি পদ্ধতি এরে

ট্রিভিয়া নোট হিসাবে: মানচিত্রের প্রয়োগ প্রতিটিটির উপর ভিত্তি করে ।


13

মানচিত্র প্রতিটি থেকে কীভাবে আলাদা হয় তার একটি দ্রুত ডেমো এখানে

a = ["a", "b", "c"];
#Array.map
p a.map {|item| "map_" + item}
#prints ["map_a", "map_b", "map_c"]

#Array.each
p a.each {|item| "map_" + item}
#prints ["a", "b", "c"]

আপনি যে মানচিত্র আয় দেখতে ["map_a", "map_b", "map_c"]যেহেতু প্রতিটি মাত্র iterates কিন্তু মূল অ্যারের ফেরৎ: ["a", "b", "c"]

সুতরাং প্রত্যেকটি একটি অ্যারে প্রসেসিংয়ের জন্য ব্যবহৃত হয় এবং প্রক্রিয়াজাত অ্যারে দিয়ে কিছু করতে মানচিত্র ব্যবহৃত হয়।


4

.each আপনার প্রাথমিকভাবে সরবরাহ করা একই অ্যারেটি প্রদান করে:

[1,2,3].each { |i| i + 1 }
#=> [1,2,3]

.map প্রতিটি ব্লক কলের ফলাফলের বাইরে একটি নতুন অ্যারে প্রদান করে:

[1,2,3].map { |i| i + 1 }
#=> [2,3,4]

1

অ্যারে # প্রতিটি পদ্ধতি একই অ্যারে প্রদান করে

a = [1,2,3,4,5]
a.object_id #70284994490700

b = a.each {|n| n + 2}
p b #[1,2,3,4,5]
b.object_id #70284994490700 <<--- it's the same as a

অ্যারে # মানচিত্র পদ্ধতিটি একটি নতুন অ্যারে প্রদান করে

c = [1,2,3,4,5]
c.object_id #70219117705860

d = c.map {|n| n + 2}
p d #[3,4,5,6,7]
d.object_id #70284994343620  <<---- it's different than c

0

আপনি যখন কোনও হ্যাশটিতে মানচিত্র ব্যবহার করেন, তা স্পষ্টতই একটি অ্যারেতে হ্যাশটিকে কাস্ট করে, তাই আপনার কাছে

[["d", [11, 22]], ["f", [33, 44, 55]]]

বনাম.এইচ {...} কেবলমাত্র আপনাকে শেষ মূল্যায়ন ফিরিয়ে দেয়, যা ["ডি", [11, 22]] এবং [33, 44, 55] এর জন্য ["চ", [ 33, 44, 55]]। সর্বশেষ যোগদানের আগে, আপনার আছে

[[11, 22], [33, 44, 55]]

0

আপনি mapBang এর সাথে ব্যবহার করতে পারেন map!যা উত্স অ্যারে পরিবর্তন করে


এটি প্রশ্নের উত্তর নয়। প্রশ্নটির মধ্যে পার্থক্য সম্পর্কে each, যা প্রদত্ত ব্লকটি কার্যকর করে এবং মূল অ্যারেটি দেয়; এবং map, যা মান হিসাবে ব্লকটি কার্যকর করার ফলাফলের সাথে একটি অ্যারে প্রদান করে
সাম্পসন ক্রোলে ২
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.