আমার ব্যক্তিগত প্রিয় পদ্ধতিটি হল টিউপলসের জন্য সরবরাহিত অন্তর্নিহিত ক্রমটি ব্যবহার করা, যেমন এটি পরিষ্কার, সংক্ষিপ্ত এবং সঠিক:
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
জন্য গুলি Tuple
s থেকে একটি রূপান্তর সম্ভব TupleN[...]
করার Ordered[TupleN[...]]
প্রদত্ত একটি অন্তর্নিহিত Ordering[TN]
সব উপাদান বিদ্যমান নেই T1, ..., TN
tuple এর, যা সবসময় ক্ষেত্রে হওয়া উচিত কারণ এটির কোনো কোনো ডেটা ধরনের উপর সাজানোর কোন জ্ঞান করে তোলে 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
, সুতরাং একটি অর্ডার সরবরাহ করা বেশিরভাগ ক্ষেত্রেই একটি অন্তর্নিহিত রূপান্তরকে সরিয়ে দেয়।