আমার ব্যক্তিগত প্রিয় পদ্ধতিটি হল টিউপলসের জন্য সরবরাহিত অন্তর্নিহিত ক্রমটি ব্যবহার করা, যেমন এটি পরিষ্কার, সংক্ষিপ্ত এবং সঠিক:
case class A(tag: String, load: Int) extends Ordered[A] {
// Required as of Scala 2.11 for reasons unknown - the companion to Ordered
// should already be in implicit scope
import scala.math.Ordered.orderingToOrdered
def compare(that: A): Int = (this.tag, this.load) compare (that.tag, that.load)
}
এটি কাজ করে কারণ সঙ্গীOrdered কোনও অন্তর্নিহিত রূপান্তর সংজ্ঞা Ordering[T]দেয় Ordered[T]যা থেকে কোনও শ্রেণি প্রয়োগের সুযোগ রয়েছে Ordered। অন্তর্নিহিত অস্তিত্ব Orderingজন্য গুলি Tuples থেকে একটি রূপান্তর সম্ভব TupleN[...]করার Ordered[TupleN[...]]প্রদত্ত একটি অন্তর্নিহিত Ordering[TN]সব উপাদান বিদ্যমান নেই T1, ..., TNtuple এর, যা সবসময় ক্ষেত্রে হওয়া উচিত কারণ এটির কোনো কোনো ডেটা ধরনের উপর সাজানোর কোন জ্ঞান করে তোলে Ordering।
কোনও যৌগিক বাছাই কী জড়িত যে কোনও সাজানোর দৃশ্যের জন্য টিপলসের জন্য অন্তর্নিহিত ক্রমটিপশনটি হ'ল:
as.sortBy(a => (a.tag, a.load))
যেহেতু এই উত্তরটি জনপ্রিয় হিসাবে প্রমাণিত হয়েছে আমি এটিকে আরও প্রসারিত করতে চাই, উল্লেখ করে যে নিম্নলিখিত পরিস্থিতিতেগুলির মতো সমাধানটি কিছু পরিস্থিতিতে এন্টারপ্রাইজ-গ্রেড হিসাবে বিবেচনা করা যেতে পারে:
case class Employee(id: Int, firstName: String, lastName: String)
object Employee {
// Note that because `Ordering[A]` is not contravariant, the declaration
// must be type-parametrized in the event that you want the implicit
// ordering to apply to subclasses of `Employee`.
implicit def orderingByName[A <: Employee]: Ordering[A] =
Ordering.by(e => (e.lastName, e.firstName))
val orderingById: Ordering[Employee] = Ordering.by(e => e.id)
}
দেওয়া হয়েছে es: SeqLike[Employee], es.sorted()নাম অনুসারে বাছাই করবে এবং es.sorted(Employee.orderingById)আইডি অনুসারে বাছাই করবে। এর কয়েকটি সুবিধা রয়েছে:
- প্রকারভেদগুলি দৃশ্যমান কোড শিল্পকর্ম হিসাবে একক স্থানে সংজ্ঞায়িত করা হয়। আপনার যদি অনেক ক্ষেত্রে জটিল প্রকারের থাকে তবে এটি কার্যকর।
- স্কেল লাইব্রেরিতে প্রয়োগ করা বেশিরভাগ বাছাই কার্যকারিতা উদাহরণগুলির সাহায্যে পরিচালনা করে
Ordering, সুতরাং একটি অর্ডার সরবরাহ করা বেশিরভাগ ক্ষেত্রেই একটি অন্তর্নিহিত রূপান্তরকে সরিয়ে দেয়।