রুবি হ্যাশ কী?
একটি হ্যাশ হল একটি ডেটা স্ট্রাকচার যা ডেটা সংরক্ষণ করে_UNIQUE_ key-value পেয়ারের রূপে। অ্যারে থেকে ভিন্ন, এখানে কোনো न्यümerিক্যাল ইনডেক্স নেই, আপনি কি দিয়ে হ্যাশ ভ্যালু অ্যাক্সেস করেন।
উদাহরণ شامل:
- দেশের নাম এবং তাদের করেসপন্ডিং কান্ট্রি কোডের তালিকা (যেমন ES ⇾ Spain)
- একটি ডিকশনারি, যেখানে প্রতিটি শব্দের সম্ভাব্য ডেফিনিশনের একটি তালিকা থাকে
- একটি ডোমেইন নেম এবং এর IP অ্যাড্রেস
আপনার রুবি প্রোগ্রামে হ্যাশ ব্যবহার করা সঠিক পরিস্থিতিতে ব্যবহার করলে আপনার কোড স্পিড আপ করতে পারে।
অন্য কথায়:
আপনার কাছে ডেটা আছে যা (বা যা রূপান্তরিত করা যায়) একটি ডিকশনারি-লাইক ফরম্যাটে, যেখানে ডেটা কি দিয়ে গ্রুপ করা যায় এবং সংশ্লিষ্ট ভ্যালুগুলির সাথে অ্যাসোসিয়েট করা যায়।
হ্যাশ কীভাবে তৈরি করবেন
ঠিক আছে।
আমরা হ্যাশ কী সেটা সম্পর্কে সাধারণ ধারণা পেয়েছি, কিন্তু আপনি কীভাবে একটি তৈরি করবেন?
এভাবে:
{} এটি একটি খালি হ্যাশ!
তিনটি key/value পেয়ার সহ একটি হ্যাশ এইরকম দেখায়:
{ a: 1, b: 2, c: 3 } যেখানে a হল একটি কি, এবং 1 হল সেই কির জন্য করেসপন্ডিং ভ্যালু। লক্ষ্য করুন key-value পেয়ারগুলো কমা দিয়ে সেপারেট করা।
এখন:
চলুন দেখি আপনি আপনার রুবি প্রজেক্টে হ্যাশ কীভাবে ব্যবহার করতে পারেন সাধারণ হ্যাশ মেথডসহ।
রুবি হ্যাশে ভ্যালু সংরক্ষণ করা
আপনি কিছু প্রাথমিক ভ্যালুসহ একটি হ্যাশ তৈরি করতে পারেন, যেন আমরা ইতিমধ্যে দেখেছি।
এখানে আরেকটি উদাহরণ:
fruits = { coconut: 1, apple: 2, banana: 3 } অন্য একটি অপশন হলো একটি বিদ্যমান হ্যাশে নতুন ভ্যালু যোগ করা।
এভাবে:
fruits[:orange] = 4
এখানে :orange হ্যাশ কি হিসেবে, এবং 4 এর করেসপন্ডিং ভ্যালু হিসেবে।
কেন কলন শব্দ
:orangeএর আগে থাকে যখন আমরা একটি ভ্যালু অ্যাক্সেস করি এবং শব্দorange:এর পরে যখন আমরা একটি হ্যাশ তৈরি করি? এটি একটি নাইসার সিনট্যাক্স যা আপনাকে হ্যাশ-রকেট (=>) সিম্বল ছাড়া হ্যাশ তৈরি করতে দেয়, যা একটি বৈধ, কিন্তু পুরানো পদ্ধতি।
ভ্যালু যেকোনো রুবি অবজেক্ট হতে পারে।
সহিত:
- স্ট্রিংস
- ইন্টিজার এবং ফ্লোটস
- অ্যারে
কি-ও যেকোনো জিনিস হতে পারে, কিন্তু সিম্বল (যেমন :banana) এবং স্ট্রিংস সবচেয়ে কমন টাইপের কি যা আপনি পাবেন।
মনে রাখবেন যে…
কি যুনিক, আমরা শুধু একটাই :orange কি, বা একটাই :apple কি রাখতে পারি।
আপনি যখন একই কি দুবার যোগ করেন, আপনি এর ভ্যালু পরিবর্তন করেন।
হ্যাশ থেকে ভ্যালু অ্যাক্সেস করা
আপনি একটি হ্যাশ কি দিয়ে অ্যাক্সেস করেন।
আপনি যদি সরাসরি ভ্যালু অ্যাক্সেস করতে চান, তবে হ্যাশ আপনার ডেটার জন্য সঠিক স্ট্রাকচার নয়।
উদাহরণ:
fruits[:orange] # 4
এটিই হ্যাশের মূল পয়েন্ট, দ্রুত একটি আইটেম এর কি দিয়ে লুক আপ করা।
যদি একটি কি অস্তিত্বে না থাকে, আপনি nil পাবেন।
fruits[:peach] # nil
বিকল্পভাবে, আপনি fetch মেথড ব্যবহার করতে পারেন, যা আপনাকে একটি ডিফল্ট ভ্যালু দিতে দেয়।
উদাহরণ:
fruits.fetch(:peach, 0)
আপনি যদি ডিফল্ট ভ্যালু ছাড়া (২য় আর্গুমেন্ট) fetch ব্যবহার করেন, রুবি একটি KeyError এক্সেপশন রেইজ করবে।
এটি সাহায্যকারী কারণ আপনি জানবেন কোন কি মিসিং।
দুইটি রুবি হ্যাশ মার্জ করা
আপনি দুটি হ্যাশ নিতে পারেন এবং সেগুলো একসাথে মার্জ করে একটি নতুন হ্যাশ বানাতে পারেন।
কোন মেথড এটি করে?
এটা অনুমান করা কঠিন নয়। মেথডের নাম হল merge।
এটি কীভাবে ব্যবহার করবেন:
defaults = { a: 1, b: 2, c: 3 } preferences = { c: 4 } defaults.merge!(preferences) # {:a=>1, :b=>2, :c=>4} লক্ষ্য করুন যে যেহেতু কি যুনিক, নতুন ভ্যালু পুরনো ভ্যালু ওভাররাইট করে।
আপনি এই সত্যটি আকর্ষণীয় সমাধানের জন্য ব্যবহার করতে পারেন, যেমন একটি “defaults” হ্যাশ তৈরি করা যা ব্যবহারকারীরা তাদের নিজস্ব হ্যাশ পাস করে ওভাররাইড করতে পারেন।
আপনি যদি কীভাবে কি মার্জ হবে সেটা আরও নিয়ন্ত্রণ করতে চান, আপনি একটি ব্লক পাস করতে পারেন।
এভাবে:
defaults.merge!(preferences) { |key, old, new| [old, new].max } যেখানে old হল defaults- থেকে আসা ভ্যালুগুলো, এবং new হল preferences- থেকে আসা ভ্যালুগুলো।
একটি কির জন্য একাধিক ভ্যালু
একটি ডিকশনারিতে…
শব্দগুলো যুনিক, কিন্তু সেগুলোর সাথে একাধিক ভ্যালু (ডেফিনিশন) অ্যাসোসিয়েটেড থাকতে পারে।
আপনি রুবিতে এটি করতে পারেন!
উদাহরণ:
dictionary = { opportunity: [ "a set of circumstances that makes it possible to do something", "a situation or condition favorable for attainment of a goal" ], creativity: [ "the use of imagination or original ideas to create something new", "the ability to create", "the process where new ideas emerge from combining existing ideas in new ways" ] } dictionary[:creativity][1] যেখানে dictionary[:creativity] আপনাকে একটি অ্যারে দেয় এবং [1] সেই অ্যারে থেকে ২য় এলিমেন্ট দেয়।
অন্য কথায়:
কি হল একটি সিম্বল এবং ভ্যালুগুলো হল অ্যারে। আপনি হ্যাশ অ্যাক্সেস করলে একটি অ্যারে ফিরে পাবেন যা আপনি সাধারনভাবে অ্যাক্সেস করবেন, যেকোনো অন্য অ্যারের মতো।
হ্যাশ সর্ট করা
আপনি অ্যারে সর্ট করতে পারেন। কিন্তু আপনি কি জানতেন যে আপনি হ্যাশও সর্ট করতে পারেন?
আপনি যখন একটি হ্যাশ sort করেন, এটি কি দিয়ে সর্ট হয়।
উদাহরণ:
{ b: 1, a: 2 }.sort # [[:a, 2], [:b, 1]] আপনি ভ্যালু দিয়েও সর্ট করতে পারেন:
{ c: 3, b: 1, a: 2 }.sort_by(&:last) আপনি লক্ষ্য করবেন যে হ্যাশ সর্ট করলে যা পাবেন সেটা আর একটি হ্যাশ নয়…
এটি একটি অ্যারে!
আপনি কিন্তু এই অ্যারেকে আবার হ্যাশে কনভার্ট করতে পারেন, to_h মেথড ব্যবহার করে।
হ্যাশ থেকে সকল কি এবং ভ্যালু পাওয়া
আপনি যদি সকল হ্যাশ কির তালিকা চান, ভাল খবর, এর জন্য একটি মেথড আছে!
এটি হলো:
{ apple: 1, banana: 2 }.keys # [:apple, :banana] একটি মেথডও আছে যা আপনাকে ভ্যালুসহ একটি অ্যারে দেয়:
{ apple: 1, banana: 2 }.values # [1, 2] আপনি যদি জানতে চান একটি কি হ্যাশে আছে কিনা, অ্যারে পাওয়ার পরিবর্তে key? মেথড ব্যবহার করুন।
এই মেথড একটি true বা false ভ্যালু রিটার্ন করে।
সারাংশ
আপনি রুবি হ্যাশ সম্পর্কে শিখেছেন, একটি সহায়ক ডেটা স্ট্রাকচার যা key-value পেয়ার থেকে গঠিত। আপনি কীভাবে একটি হ্যাশ কি দিয়ে অ্যাক্সেস করবেন এবং কীভাবে হ্যাশে নতুন ডেটা সংরক্ষণ করবেন সেটাও শিখেছেন।
এখন irb (বা pry) খুলুন এবং হ্যাশ দিয়ে খেলা শুরু করুন!
পড়ার জন্য ধন্যবাদ 🙂