Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

135
Views
Swift 4 Conform Problema de método de ordenación y protocolo comparable

Escribo siguiendo Struct que se ajustan al protocolo Comparable.

 struct Record: Comparable { static func < (lhs: Record, rhs: Record) -> Bool { if lhs.wins == rhs.wins { return lhs.losses > rhs.losses } return lhs.wins < rhs.wins } var wins: Int var losses: Int init(wins: Int, losses: Int) { self.wins = wins self.losses = losses } } var a1 = Record(wins: 3, losses: 8) var b1 = Record(wins: 3, losses: 9) var c1 = Record(wins: 4, losses: 7) var records = [a1, b1, c1] records.reverse() print(records)

Todo funciona bien usando > < == y ordenar también. pero si invierto el método de clasificación en una matriz de registros, me da el siguiente resultado:

[__lldb_expr_48.Record(ganancias: 4, derrotas: 7), __lldb_expr_48.Record(ganancias: 3, derrotas: 9), __lldb_expr_48.Record(ganancias: 3, derrotas: 8)]

Las ganancias más altas deben ser lo primero, seguidas de menos ganancias, pero si las ganancias son iguales, menos pérdidas deben ocurrir antes de más pérdidas. ¿Estoy haciendo algo mal aquí o me estoy perdiendo algo? Todavía estoy aprendiendo rápido, así que podría ser posible.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Para ordenar una variedad de cosas en orden inverso, simplemente puede sort por > :

 records.sort(by: >)

reverse simplemente invertirá la matriz, sin ordenarla.

over 4 years ago · Santiago Trujillo Report

0

Simplemente no ordenas tu matriz antes de invertirla

 records.sort() records.reverse()
over 4 years ago · Santiago Trujillo Report

0

También hay una forma universal de ordenar como quieras sin ajustarse al protocolo Comparable. Puede ser útil si aplica varias lógicas de ordenación en diferentes lugares o simplemente ordena con poca frecuencia. Prueba este:

 struct SimpleRecord { var wins: Int var losses: Int var name: String // we get a simple init for free } let a = SimpleRecord(wins: 3, losses: 8, name: "abc") let b = SimpleRecord(wins: 3, losses: 9, name: "some ") let c = SimpleRecord(wins: 4, losses: 7, name: "abc") let d = SimpleRecord(wins: 3, losses: 8, name: "Abc") var simpleRecords = [a, b, c, d] simpleRecords.sort(by: { (lhs, rhs) -> Bool in if lhs.wins > rhs.wins { return true } else if lhs.wins == rhs.wins { if lhs.losses < rhs.losses { return true } else if lhs.losses == rhs.losses { return (lhs.name.localizedStandardCompare(rhs.name) == ComparisonResult.orderedDescending) } else { return false } } else { return false } }) // print(simpleRecords) // it is a lazy collection so print is a bit messy simpleRecords.forEach{ print($0) }

Tenga en cuenta cómo podemos usar algoritmos de clasificación predefinidos no triviales (pero eficientes) para cadenas (de Foundation) como 'localizedStandardCompare', 'localizedCompare', etc.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!