Repaso - Ordenamiento personalizado
Parte de la sección Programación orientada a objetos del Journey de Swift de Coddy. Lección 41 de 57.
Desafío
DifícilUna biblioteca de música ordena y elimina duplicados de canciones con los protocolos estándar. Song tiene title, artist, year y rating (1-5). Haz que sea Equatable y Hashable según title y artist, ignorando mayúsculas y minúsculas (la misma canción del mismo artista), Comparable por rating de mayor a menor, después por year de más reciente a más antiguo y después por título alfabéticamente, y CustomStringConvertible como Title - Artist (2019) ****, con una estrella por cada punto de valoración.
Completa playlist(_:), que elimina los duplicados (conservando el primero) mediante un Set, ordena con sorted() y devuelve las descripciones de las canciones, seguido de duplicates removed: 1.
El código proporcionado lee las canciones como líneas con el formato title,artist,year,rating e imprime cada línea devuelta.
Tu código va en Song.swift y Functions.swift. main.swift contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
// Código de entrada/salida suministrado: déjalo tal como está
var input: [String] = []
while let line = readLine() { input.append(line) }
let songs = input.map { line -> Song in
let p = line.split(separator: ",").map(String.init)
return Song(title: p[0], artist: p[1], year: Int(p[2])!, rating: Int(p[3])!)
}
for line in playlist(songs) { print(line) }
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesMétodos y selfInicializadoresLas clases son referenciasRepaso: tarjeta de biblioteca4Encapsulación
Control de accesoSolo lectura desde fueraProtección del estadoInicializadores que pueden fallarRepaso - Cuenta bancaria7Polimorfismo y genéricos
PolimorfismoConversión de tiposFunciones genéricasTipos genéricosRepaso - Calculadora de formas2Structs y tipos por valor
StructsSemántica de valoresMétodos mutablesStruct o claseRepaso - elemento del inventario5Herencia
SubclasesSobrescritura de métodosInicializadores y superfinal y jerarquíasRepaso: jerarquía de empleados8Protocolos estándar
CustomStringConvertibleEquatableComparableHashableRepaso - Ordenamiento personalizado11Proyecto: Gestión de bibliotecas
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Swift