কম্পিউটার

রুবি হ্যাশ - সংজ্ঞা, উদাহরণ এবং পদ্ধতি:চূড়ান্ত গাইড

রুবি হ্যাশ কি?

হ্যাশ হল একটি ডাটা স্ট্রাকচার যা ইউনিক কী-ভ্যালু পেয়ার আকারে ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। অ্যারে থেকে ভিন্ন, কোন সংখ্যাসূচক সূচক নেই, আপনি কী দিয়ে হ্যাশ মান অ্যাক্সেস করেন।

উদাহরণ অন্তর্ভুক্ত :

  • দেশের নামের তালিকা এবং তাদের সংশ্লিষ্ট দেশের কোড (যেমন ES ⇾ স্পেন)
  • একটি অভিধান, যেখানে প্রতিটি শব্দের সম্ভাব্য সংজ্ঞার তালিকা রয়েছে
  • একটি ডোমেন নাম এবং এটি আইপি ঠিকানা

আপনার রুবি প্রোগ্রামে একটি হ্যাশ ব্যবহার করলে আপনার কোডের গতি বাড়তে পারে যখন সঠিক পরিস্থিতিতে ব্যবহার করা হয়।

অন্য কথায় :

আপনার কাছে ডেটা আছে যা একটি অভিধানের মতো বিন্যাস (বা রূপান্তরিত হতে পারে), যেখানে ডেটা কী এবং সংশ্লিষ্ট মান দ্বারা গোষ্ঠীবদ্ধ করা যেতে পারে।

কিভাবে হ্যাশ তৈরি করবেন

ঠিক আছে।

আমরা হ্যাশ কী সে সম্পর্কে সাধারণ ধারণা পাই, কিন্তু আপনি কীভাবে এটি তৈরি করবেন?

এরকম :

{}

এটি একটি খালি হ্যাশ!

তিনটি কী/মান জোড়া সহ একটি হ্যাশ এইরকম দেখায় :

{ a: 1, b: 2, c: 3 }

যেখানে a একটি কী, এবং 1 সেই কীটির জন্য সংশ্লিষ্ট মান। লক্ষ্য করুন যে কী-মান জোড়া কমা দ্বারা পৃথক করা হয়েছে।

এখন :

আসুন দেখি কিভাবে আপনি আপনার রুবি প্রজেক্টে সাধারণ হ্যাশ পদ্ধতিতে হ্যাশ ব্যবহার করতে পারেন।

রুবি হ্যাশে মান সংরক্ষণ করা

আপনি প্রাথমিক মানগুলির একটি সেট সহ একটি হ্যাশ তৈরি করতে পারেন, যেমনটি আমরা ইতিমধ্যে দেখেছি৷

এখানে আরেকটি উদাহরণ আছে :

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.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 মান।

সারাংশ

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

এখন irb (বা pry) খুলুন এবং হ্যাশ দিয়ে খেলা শুরু করুন!

পড়ার জন্য ধন্যবাদ 🙂


  1. ইনপুট ও আউটপুট (IO) রুবিতে:দ্য ডেফিনিটিভ গাইড

  2. রুবি গ্রেপ পদ্ধতি কীভাবে ব্যবহার করবেন (উদাহরণ সহ)

  3. রুবি বিকাশকারীদের জন্য সময় জটিলতার নির্দিষ্ট গাইড

  4. রুবির অ্যারে ক্লাস কীভাবে ব্যবহার করবেন (উদাহরণ + দরকারী পদ্ধতি)