Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

140
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

0

Simplemente no ordenas tu matriz antes de invertirla

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

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda