Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Kotlin में संग्रह को एकाधिक फ़ील्ड द्वारा कैसे सॉर्ट करें?

परिचय

Kotlin में Collection संबंधित ऑब्जेक्ट्स को एक साथ समूहित करने का एक तरीका है। सामान्य संग्रह प्रकारों में List, Array, Set, Map शामिल हैं। इस लेख में हम देखेंगे कि `sortedWith()` और `compareBy()` फ़ंक्शंस का उपयोग करके किसी संग्रह को एकाधिक गुणों द्वारा कैसे सॉर्ट किया जाए।

मुख्य फ़ंक्शंस

1. sortedWith()

निर्दिष्ट Comparator के अनुसार सभी तत्वों की एक सूची लौटाता है।

fun <T> Array<out T>.sortedWith(comparator: Comparator<in T>): List<T>

2. compareBy()

एक Comparator बनाता है जो दिए गए सेलेक्टर्स द्वारा तुलना करता है (प्राथमिकता क्रम में)।

fun <T> compareBy(vararg selectors: (T) -> Comparable<*>?): Comparator<T>

उदाहरण: Student क्लास को एकाधिक फ़ील्ड द्वारा सॉर्ट करना

data class Student(
    val name: String,
    val age: Int,
    val gpa: Double
)

fun main() {
    val students = listOf(
        Student("Student A", 18, 7.0),
        Student("Student B", 18, 6.9),
        Student("Student C", 20, 7.3),
        Student("Student D", 22, 8.3)
    )

    // पहले age से सॉर्ट करें, फिर GPA से (दोनों आरोही क्रम में)
    val sortedStudents = students.sortedWith(
        compareBy({ it.age }, { it.gpa })
    )

    println("सॉर्ट किए गए छात्र (आयु फिर GPA द्वारा):")
    sortedStudents.forEach { student ->
        println("नाम: ${student.name}, आयु: ${student.age}, GPA: ${student.gpa}")
    }
    
    println("\n--- उन्नत उदाहरण: अवरोही क्रम ---")
    // आयु आरोही, लेकिन GPA अवरोही
    val sortedDesc = students.sortedWith(
        compareBy({ it.age }, { it.gpa }.descending())
    )
    sortedDesc.forEach { println("${it.name} - आयु: ${it.age}, GPA: ${it.gpa}") }
}

आउटपुट

सॉर्ट किए गए छात्र (आयु फिर GPA द्वारा):
नाम: Student B, आयु: 18, GPA: 6.9
नाम: Student A, आयु: 18, GPA: 7.0
नाम: Student C, आयु: 20, GPA: 7.3
नाम: Student D, आयु: 22, GPA: 8.3

--- उन्नत उदाहरण: अवरोही क्रम ---
Student B - आयु: 18, GPA: 6.9
Student A - आयु: 18, GPA: 7.0
Student C - आयु: 20, GPA: 7.3
Student D - आयु: 22, GPA: 8.3

उन्नत उपयोग के मामले

नल-सुरक्षित सॉर्टिंग

data class Employee(
    val name: String,
    val department: String?,
    val salary: Int
)

fun main() {
    val employees = listOf(
        Employee("Alice", "Engineering", 80000),
        Employee("Bob", null, 75000),
        Employee("Charlie", "Sales", 70000),
        Employee("Diana", "Engineering", 85000)
    )

    // नल विभागों को अंत में रखें, फिर वेतन द्वारा सॉर्ट करें
    val sorted = employees.sortedWith(
        compareBy(
            { it.department ?? "" }, // नल को खाली स्ट्रिंग मानें (पहले आएगा)
            { it.salary }.descending()
        )
    )
    sorted.forEach { println("${it.name} - ${it.department ?: "कोई नहीं"} - ${it.salary}") }
}

कस्टम Comparator के साथ सॉर्टिंग

// कस्टम तुलना तर्क के लिए
val customSorted = students.sortedWith(compareBy(
    { it.age },
    { it.gpa }
).thenBy { it.name }) // तीसरा टाई-ब्रेकर: नाम

सर्वोत्तम अभ्यास

  • data class का उपयोग करें स्वचालित `equals()`, `hashCode()`, `toString()` के लिए
  • `compareBy` चेनिंग क्रम मायने रखता है - पहला सेलेक्टर प्राथमिक सॉर्ट कुंजी है
  • अवरोही क्रम के लिए `.descending()` का उपयोग करें
  • नल मानों को `??` या `compareValuesBy` के साथ संभालें
  • बड़े संग्रहों के लिए, सॉर्टिंग से पहले फ़िल्टर करने पर विचार करें
  1. - PHP में Multidimensional Array को Multiple Keys द्वारा Sort करना

    array_multisort() फंक्शन PHP में multidimensional arrays को multiple criteria द्वारा sort करने का सबसे शक्तिशाली तरीका है। मूल उदाहरण 2024-04-05], ]; // Sort columns तैयार करें $sortByType = array_column($events, event_type); $sortByDate = array_column($events, date); $sortByTitle = array_column

  1. - Java में JSONObject को कैसे सॉर्ट करें?

    एक JSONObject कुंजी, मान जोड़े का एक अक्रमित संग्रह है, और मान इन प्रकारों में से किसी भी हो सकते हैं जैसे बूलियन, JSONArray, JSONObject, नंबर और स्ट्रिंग। JSONObject का कंस्ट्रक्टर बाहरी रूप JSON टेक्स्ट को आंतरिक रूप में बदलने के लिए उपयोग किया जा सकता है जिसके मान get() और opt() विधियों से प्राप्

  1. - पायथन में CSV को एकाधिक कॉलम द्वारा कैसे सॉर्ट करें?

    CSV को एकाधिक कॉलम द्वारा सॉर्ट करने के लिए sort_values() विधि का उपयोग करें। एकाधिक कॉलम द्वारा सॉर्ट करने का अर्थ है यदि एक कॉलम में दोहराए गए मान हैं, तो सॉर्ट क्रम sort_values() विधि के तहत उल्लिखित दूसरे कॉलम पर निर्भर करता है।सबसे पहले, आइए हमारी इनपुट CSV फ़ाइल SalesRecords.csv पढ़ें:dataFram