Ruby<=>(স্পেসশিপ) অপারেটর কি?




operators comparison-operators (4)

Ruby <=> (স্পেসশিপ) অপারেটর কি? অপারেটর অন্য কোন ভাষা দ্বারা বাস্তবায়িত হয়?


<=> ('স্পেসশিপ' অপারেটর) কী

অপারেটরকে উপস্থাপিত RFC এর মতে, $ A <=> $ b

 -  0 if $a == $b
 - -1 if $a < $b
 -  1 if $a > $b
 - Return 0 if values on either side are equal
 - Return 1 if value on the left is greater
 - Return -1 if the value on the right is greater

উদাহরণ:

//Comparing Integers

echo 1 <=> 1; //ouputs 0
echo 3 <=> 4; //outputs -1
echo 4 <=> 3; //outputs 1

//String Comparison

echo "x" <=> "x"; // 0
echo "x" <=> "y"; //-1
echo "y" <=> "x"; //1

আরও:

// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1

// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1

// Objects
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 0

আমি সহজ উদাহরণ দিয়ে ব্যাখ্যা করবে

  1. [1,3,2] <=> [2,2,2]

    রুবি বাম দিকে উভয় অ্যারের প্রতিটি উপাদান তুলনা শুরু করা হবে। বাম অ্যারের জন্য 1 ডান অ্যারে 2 এর চেয়ে ছোট। তাই বাম অ্যারে ডান অ্যারের চেয়ে ছোট। আউটপুট হবে -1

  2. [2,3,2] <=> [2,2,2]

    উপরে হিসাবে এটি প্রথম সমান যা প্রথম উপাদান তুলনা করবে তারপর এটি দ্বিতীয় উপাদান তুলনা করবে, এই ক্ষেত্রে বাম অ্যারের দ্বিতীয় উপাদান বৃহত্তর তাই আউটপুট 1


পার্ল সম্ভবত এটি ব্যবহার করার জন্য প্রথম ভাষা ছিল। Groovy এটি সমর্থন করে অন্য ভাষা। আর্গুমেন্ট সমান বা অসাম্য কিনা তা নির্ভর করে প্রকৃতপক্ষে 1 ( true ) বা 0 ( false ) ফেরত দেওয়ার পরিবর্তে, স্পেসশিপ অপারেটরটি সঠিক যুক্তি সম্পর্কিত বাম যুক্তিটির মানের উপর নির্ভর করে 1 , 0 , বা −1 প্রদান করবে।

a <=> b :=
  if a < b then return -1
  if a = b then return  0
  if a > b then return  1
  if a and b are not comparable then return nil

এটি একটি অ্যারে বাছাই করার জন্য দরকারী।


যেহেতু এই অপারেটরটি পূর্ণসংখ্যা প্রকাশের তুলনাকে হ্রাস করে, তাই এটি একাধিক কলাম / গুণাবলীর উপর নির্ভরশীল ঊর্ধ্বমুখী বা নিম্নমানের সাজানোর সর্বাধিক সাধারণ উদ্দেশ্য সরবরাহ করে।

উদাহরণস্বরূপ, যদি আমার কাছে বস্তুর একটি অ্যারে থাকে তবে আমি এরকম কিছু করতে পারি:

# `sort!` modifies array in place, avoids duplicating if it's large...

# Sort by zip code, ascending
my_objects.sort! { |a, b| a.zip <=> b.zip }

# Sort by zip code, descending
my_objects.sort! { |a, b| b.zip <=> a.zip }
# ...same as...
my_objects.sort! { |a, b| -1 * (a.zip <=> b.zip) }

# Sort by last name, then first
my_objects.sort! { |a, b| 2 * (a.last <=> b.last) + (a.first <=> b.first) }

# Sort by zip, then age descending, then last name, then first
my_objects.sort! do |a, b|
      4 * (a.zip   <=> b.zip) +
     -3 * (a.age   <=> b.age) +
      2 * (a.last  <=> b.last) +
          (a.first <=> b.first)
end

এই মৌলিক প্যাটার্নটি যেকোন সংখ্যক কলাম অনুসারে সাজানোর জন্য সাধারণকরণ করা যেতে পারে, প্রতিটিতে আরোহনের / ক্রমবর্ধমান কোনও ক্রমানুসারে।







spaceship-operator