Map হলো একটি রুবি মেথড যা আপনি অ্যারে, হ্যাশ এবং রেঞ্জের সাথে ব্যবহার করতে পারেন।
Map-এর মূল ব্যবহার হলো ডেটা ট্রান্সফর্ম করা।
উদাহরণস্বরূপ:
একটি স্ট্রিং অ্যারে দেওয়া থাকলে, আপনি প্রতিটি স্ট্রিংয়ের ওপর যেতে পারেন এবং প্রতিটি ক্যারেক্টার UPPERCASE করতে পারেন।
বা আপনার যদি User অবজেক্টের একটি লিস্ট থাকে…
আপনি সেগুলোকে কনভার্ট করতে পারেন তাদের সম্পর্কিত ইমেইল অ্যাড্রেস, ফোন নম্বর, বা User ক্লাসে সংজ্ঞায়িত যেকোনো অ্যাট্রিবিউট-এ।
আসুন সঠিকভাবে কীভাবে করবেন সেটি দেখি!
রুবি Map সিনট্যাক্স
Map-এর সিনট্যাক্স এমন দেখায়:
array = ["a", "b", "c"] array.map { |string| string.upcase } # ["A", "B", "C"]
প্রথমে, আপনার একটি অ্যারে আছে, কিন্তু এটি হ্যাশ বা রেঞ্জও হতে পারে।
তারপর আপনি একটি ব্লকের সাথে map কল করেন।
ব্লকটি হলো ব্র্যাকেটের মধ্যে এই জিনিস { ... }। ব্লকের ভিতরে আপনি বলে থাকেন আপনি কীভাবে অ্যারেতে প্রতিটি এলিমেন্ট ট্রান্সফর্ম করতে চান। এটি মূলত একটি ফাংশন।
map কল করার পর কী ঘটে?
Map ফলাফলসহ একটি নতুন অ্যারে রিটার্ন করে।
এটি অরিজিনালটিকে পরিবর্তন করে না।
আপনি যদি অরিজিনাল অ্যারে পরিবর্তন করতে চান তবে map! ব্যবহার করতে পারেন।
রুবি Map উদাহরণ
এখানে কিছু উদাহরণ যা আপনি উপকারী পেতে পারেন।
নাম্বার ডাবল করা:
array = [1,2,3] array.map { |n| n * 2 } # [2, 4, 6]
স্ট্রিংকে ইন্টিজারে কনভার্ট:
array = ["11", "21", "5"] array.map { |str| str.to_i } # [11, 21, 5]
হ্যাশ ভ্যালুকে সিম্বলে কনভার্ট:
hash = { bacon: "protein", apple: "fruit" } hash.map { |k,v| [k, v.to_sym] }.to_h # {:bacon=>:protein, :apple=>:fruit}
এই হ্যাশ উদাহরণ সম্পর্কে:
আপনি লক্ষ্য করবেন আমাদের দুটি আর্গুমেন্ট আছে একের বদলে, কারণ একটি হ্যাশ এলিমেন্ট একটি কি এবং একটি ভ্যালু দিয়ে গঠিত।
তারপর আমি ট্রান্সফর্মড কি এবং ভ্যালুসহ একটি নতুন অ্যারে রিটার্ন করছি।
শেষ ধাপ হলো এটিকে আবার হ্যাশে কনভার্ট করা।
রুবি Map বনাম Each
Map এবং each-এর মধ্যে পার্থক্য কী?
Each হলো map-এর একটি আরও প্রিমিটিভ ভার্সন…
এটি আপনাকে প্রতিটি এলিমেন্ট দেয় যাতে আপনি সেটির সাথে কাজ করতে পারেন, কিন্তু এটি ফলাফলগুলো সংগ্রহ করে না।
Each সবসময় অরিজিনাল, অনচেঞ্জড অবজেক্ট রিটার্ন করে।
Map একই কাজ করে, কিন্তু…
এটি ট্রান্সফর্মড এলিমেন্টসহ একটি নতুন অ্যারে রিটার্ন করে।
উদাহরণ:
array.each { |n| n * 2 } # [1, 2, 3] array.map { |n| n * 2 } # [2, 4, 6]
রুবি Map বনাম Collect
Map এবং Collect ঠিক একই মেথড।
এই একই জিনিসের জন্য দুটি ভিন্ন নাম!
আপনি কোনটি ব্যবহার করবেন?
আপনি যদি ওপেন-সোর্স প্রজেক্ট পড়েন তবে আপনি দেখবেন সবচেয়ে কমন ভার্সন হলো map।
সেটি ব্যবহার করুন।
ইনডেক্সসহ Map কীভাবে ব্যবহার করবেন
আপনার যদি ভ্যালুসহ ইনডেক্স দরকার হয় তবে আপনি with_index মেথড ব্যবহার করতে পারেন।
এখানে একটি উদাহরণ:
array = %w(a b c) array.map.with_index { |ch, idx| [ch, idx] } # [["a", 0], ["b", 1], ["c", 2]]
বোনাস টিপ:
আপনি with_index-এ একটি প্যারামিটার পাস করতে পারেন আপনি যদি ০ থেকে শুরু না করতে চান।
রুবি Map শর্টহ্যান্ড (map &)
আপনি map-এর একটি শর্টহ্যান্ড ভার্সন ব্যবহার করতে পারেন যখন আপনি এমন একটি মেথড কল করেন যেনে কোনো আর্গুমেন্ট দরকার নেই।
উদাহরণ:
["11", "21", "5"].map(&:to_i)
উদাহরণ:
["orange", "apple", "banana"].map(&:class)
এই & সিনট্যাক্স শুধু map-এর জন্য সীমাবদ্ধ নয়, এটি অন্যান্য Enumerable মেথডের সাথেও ব্যবহার করা যায়।
Map মেথড মাইন্ডম্যাপ

ভিডিও টিউটোরিয়াল
সারসংক্ষেপ
আপনি রুবি map মেথড এবং কীভাবে ব্যবহার করবেন সেটি শিখেছেন! আপনি each, map এবং collect-এর পার্থক্যও শিখেছেন।
আপনি যদি এই আর্টিকেলটি পছন্দ করেন তবে আপনার রুবি বন্ধুদের সাথে শেয়ার করুন 🙂
পড়ার জন্য ধন্যবাদ!