উত্তর:
ওয়েল তারা না বেশ একই জিনিস IComparer<T>
একটি টাইপ যে দুটি ভিন্ন বস্তু তুলনা করতে সক্ষম উপর বাস্তবায়িত হয় IComparable<T>
প্রকারের নিজেদের একই ধরণের অন্য দৃষ্টান্ত সঙ্গে তুলনা করতে পারবেন উপর বাস্তবায়িত হয়।
আমি এমন IComparable<T>
সময়ে ব্যবহার করার প্রবণতা রাখি যখন আমাকে জানতে হবে যে অন্য উদাহরণটি উদাহরণের সাথে কীভাবে সম্পর্কিত this
। তুলনা বাইরে স্ট্যান্ড IComparer<T>
হিসাবে সংগ্রহ বাছাই জন্য দরকারী IComparer<T>
।
IComparable
যেভাবে আমি তুলনামূলক । যার অর্থ আমার সাথে অন্য কোনও কিছুর সাথে তুলনা করা যেতে পারে। এবং পড়ুন IComparer
যেমন আমি তুলনামূলক, আমি কেবল তুলনা করি যার অর্থ আমি কিছু জিনিসকে তুলনা করি।
এটি সত্তার উপর নির্ভর করে। উদাহরণস্বরূপ "শিক্ষার্থী" এর মতো শ্রেণীর জন্য নিম্নলিখিত হিসাবে, এটি নামের উপর ভিত্তি করে আইকাম্পারেবল থাকার অর্থ হবে।
class Student : IComparable
{
public string Name { get; set; }
public int MathScore { get; set; }
public int EnglishScore { get; set; }
public int TotalScore
{
get
{
return this.MathScore + this.EnglishScore;
}
}
public int CompareTo(object obj)
{
return CompareTo(obj as Student);
}
public int CompareTo(Student other)
{
if (other == null)
{
return 1;
}
return this.Name.CompareTo(other.Name);
}
}
তবে যদি কোনও শিক্ষক 'এ' ম্যাথস্কোরের ভিত্তিতে শিক্ষার্থীদের তুলনা করতে চান এবং শিক্ষক 'বি' ইংলিশস্কোরের ভিত্তিতে শিক্ষার্থীদের তুলনা করতে চান। আইসিম্পারারকে আলাদাভাবে প্রয়োগ করা ভাল ধারণা হবে। (আরও কৌশল কৌশল হিসাবে)
class CompareByMathScore : IComparer<Student>
{
public int Compare(Student x, Student y)
{
if (x.MathScore > y.MathScore)
return 1;
if (x.MathScore < y.MathScore)
return -1;
else
return 0;
}
}
এগুলি সবই নির্ভর করে যে আপনার ধরণটি পরিবর্তনযোগ্য বা না। আপনার কেবলমাত্র অ-পরিবর্তনীয় প্রকারভেদে আইকাম্পারেবল প্রয়োগ করা উচিত । নোট করুন যে আপনি যদি আইকোমারেবল বাস্তবায়ন করেন তবে আপনাকে অবশ্যই ==,! =, <এবং> অপারেটরগুলির সাথে সমান ওভাররাইড করতে হবে (কোড বিশ্লেষণের সতর্কতা CA1036 দেখুন)।
এই ব্লগ পোস্ট থেকে ডেভ জি উদ্ধৃত :
তবে সঠিক উত্তরটি হ'ল আইকোপ্যাপারের পরিবর্তে আইসি কম্পিউটারের প্রয়োগ করা যদি আপনার বস্তুগুলি পারস্পরিক পরিবর্তনযোগ্য হয়, এবং যখন প্রয়োজন হয় তখন আইকম্পারারের একটি উদাহরণ সারণী ফাংশনগুলিতে প্রেরণ করুন।
যেহেতু আইসিম্পেয়ার কেবল সময়ে সময়ে বাছাইয়ের জন্য ব্যবহৃত হয় কেবল একটি ডিসপোজেবল অবজেক্ট, আপনার অবজেক্টে আপনার পছন্দসই কোনও পরিবর্তনযোগ্য শব্দার্থ থাকতে পারে। তদ্ব্যতীত, এটি সমান, গেটহ্যাশকোড বা == ব্যবহার করার প্রয়োজন বা এমনকি প্রস্তাব দেয় না - আপনি যে কোনও উপায়ে এটি নির্ধারণ করতে মুক্ত free
শেষ অবধি, আপনি বিভিন্ন ক্ষেত্রে বা বিভিন্ন বিধি দ্বারা বাছাই করার জন্য আপনার ধরণের জন্য একাধিক আইসি কম্পিউটারের সংজ্ঞা দিতে পারেন। এটি একটি সংজ্ঞা দিয়ে আটকে থাকার চেয়ে অনেক বেশি নমনীয়।
সংক্ষেপে: মানের ধরণের জন্য আইকোম্পারেবল এবং রেফারেন্স ধরণের জন্য আইকোম্পারার ব্যবহার করুন।
একটি গল্প মাধ্যমে সহজ ব্যাখ্যা
হাই স্কুল বাস্কেটবল। এটি দলগুলির জন্য একটি স্কুল ইয়ার্ড বাছাই। আমি আমার দলের মধ্যে সবচেয়ে দীর্ঘ / সেরা / দ্রুততম লোকদের পেতে চাই। আমি কি করব?
আইসিম্পেয়ার ইন্টারফেস - পৃথক দুটি লোকের সাথে তুলনা করুন
Compare(Fred, John)
এবং এটি কে আরও ভাল কেটে যায়।আইকাম্পারেবলের কী হবে? - নিজেকে অন্য কারও সাথে তুলনা করুন
আপনি কি সম্প্রতি এফবিতে এসেছেন? আপনি অন্যান্য লোকেরা দুর্দান্ত জিনিসগুলি দেখতে পাচ্ছেন: বিশ্ব ভ্রমণ, উদ্ভাবনগুলি তৈরি করার সময়, আমি কিছুটা শীতল না করার জন্য করছি - ভাল আমরা যা করছি তা আইকোম্যাপেবল ইন্টারফেসটি ব্যবহার করা হচ্ছে।
তুলনামূলক ক্লাস সম্পর্কে কি?
তুলনামূলক ক্লাসটি একটি বিমূর্ত বেস শ্রেণি যা আইসিম্পারার ইন্টারফেস প্রয়োগ করে। একটি দৃ class় বাস্তবায়ন করার জন্য আপনার এই শ্রেণি থেকে নেওয়া উচিত। যাইহোক, মাইক্রোসফ্ট সুপারিশ করে যে আপনি আইসিম্পেয়ার ইন্টারফেসটি প্রয়োগ করার চেয়ে তুলনামূলক ক্লাসটি ব্যবহার করবেন:
আমরা আপনাকে সুপারিশ করি যে আপনি আইকোপ্যামার ইন্টারফেস প্রয়োগের পরিবর্তে তুলনামূলক ক্লাস থেকে উদ্ভূত হন, কারণ তুলনাকারী শ্রেণি আইকোম্পিয়ার.কম্পিয়ার পদ্ধতিটির একটি স্পষ্ট ইন্টারফেস বাস্তবায়ন সরবরাহ করে এবং ডিফল্ট সম্পত্তি যা বস্তুর জন্য ডিফল্ট তুলক হয় gets
আশা করি গল্পগুলি আপনাকে মনে রাখতে সাহায্য করবে।
অন্যরা যেমন বলেছে, তারা একই কাজ করে না।
যাই হোক না কেন, এই দিনগুলিতে আমি আইসিম্পারার ব্যবহার না করার প্রবণতা রাখি। কেন আমি? এর দায়িত্ব (দুটি বস্তুর তুলনা করার জন্য একটি বাহ্যিক সত্তা) লাম্বডা এক্সপ্রেশন সহ অনেক ক্লিনার দ্বারা পরিচালিত হতে পারে, যেমন লিনকিউয়ের বেশিরভাগ পদ্ধতি কীভাবে কাজ করে। একটি তাত্ক্ষণিক ল্যাম্বদা লিখুন যা বস্তুগুলিকে আর্গুমেন্ট হিসাবে তুলনা করে এবং একটি বিল দেয় returns এবং যদি বস্তুটি তার নিজস্ব অভ্যন্তরীণ তুলনা অপারেশনটি সংজ্ঞায়িত করে তবে এটি পরিবর্তে আইকোম্যাপারেবল প্রয়োগ করতে পারে।
আইকোম্যাপারেবল বলেছেন যে কোনও বস্তুর সাথে অন্যের তুলনা করা যেতে পারে। আইসিম্পারার এমন একটি বস্তু যা কোনও দুটি আইটেমের তুলনা করতে পারে।
আইসিম্পেয়ার একটি ইন্টারফেস যা অ্যারে বাছাই করতে ব্যবহৃত হয়, এই ইন্টারফেসটি ক্লাসকে তুলনা (টি এক্স, টিওয়াই) পদ্ধতি প্রয়োগ করতে বাধ্য করবে, যা দুটি বস্তুর তুলনা করবে। এই ইন্টারফেসটি প্রয়োগ করেছে এমন শ্রেণীর উদাহরণ অ্যারের বাছাইয়ের ক্ষেত্রে ব্যবহৃত হয়।
আইকোম্যাপারেবল এমন একটি ইন্টারফেস যা টাইপের ক্ষেত্রে প্রয়োগ করা হয় যা একই ধরণের দুটি বস্তুর তুলনা করা প্রয়োজন, এই তুলনামূলক ইন্টারফেসটি ক্লাসটিকে নিম্নলিখিত পদ্ধতিটি তুলনা করতে বাধ্য করবে তুলনা করুন (টি আপত্তি)
আইক্যুয়ালিসিম্পারার একটি ইন্টারফেস যা এটি সমান কিনা বা না তা আবিষ্কার করার জন্য ব্যবহৃত হয়, এখন আমরা এটি একটি নমুনায় দেখতে পাব যেখানে আমাদের সংগ্রহের মধ্যে একটি অবজেক্টের বিচ্ছিন্নতা খুঁজে পেতে হবে। এই ইন্টারফেসটি একটি পদ্ধতির সমান (T obj1, T obj2) কার্যকর করবে
এখন আমরা একটি উদাহরণ নিই আমাদের একটি কর্মী শ্রেণি রয়েছে, এই শ্রেণীর উপর ভিত্তি করে আমাদের একটি সংগ্রহ তৈরি করতে হবে। এখন আমাদের নিম্নলিখিত প্রয়োজনীয়তা আছে।
অ্যারে ক্লাসটি ব্যবহার করে অ্যারে বাছাই করুন ২ লিনক ব্যবহার করে সংগ্রহের প্রয়োজন: ডুপ্লিকেট সরিয়ে ফেলুন, নীচে থেকে আরও নীচে অর্ডার করুন, একজন কর্মীর আইডি সরান
abstract public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { set; get; }
}
public enum SortType
{
ByID,
BySalary
}
পাবলিক ক্লাস এমপ্লয়আইআইডসোর্টার: আইসিম্পারার {পাবলিক ইনট তুলনা (কর্মচারী এক্স, কর্মচারী y) {যদি (x.Id <y.Id) ফেরত 1; অন্যথায় যদি (x.Id> y.Id) -1 ফিরে আসে; অন্যথায় 0 ফিরে; }}
public class EmployeeSalarySorter : IComparer<Employee>
{
public int Compare(Employee x, Employee y)
{
if (x.Salary < y.Salary)
return 1;
else if (x.Salary > y.Salary)
return -1;
else
return 0;
}
}
আরও তথ্যের জন্য নীচে দেখুন http://dotnetvisio.blogspot.in/2015/12/usage-of-icomparer-icomparable- and.html