Attualmente sto lavorando a un progetto software che richiede diversi tipi di meccanismi di ordinamento. Ho cercato, inutilmente, di trovare un algoritmo per fare una sorta di tie-break. In altre parole, diciamo che hai un set di dati che potrebbe essere rappresentato in questo modo:
[Name Of Data]:[Someone's ID]-[Same Someone's Score],[Someone's ID]-[Same Someone's Score],[etc...]\n
[Name Of Data]:[Someone's ID]-[Same Someone's Score],[Someone's ID]-[Same Someone's Score],[etc...]\n
[etc...]
Una linea, quindi, può avere questo aspetto:
Wins:7-1,8-1,9-1,2-1,10-1,3-0,4-0,5-0,1-0,6-0
E un altro ha questo aspetto:
SpeakerPoints:6-26,2-20,4-19,7-17,8-16,9-16,5-16,1-12,3-11,10-8
Mi piacerebbe essere in grado di ordinare gli ID in termini di "vincitore", dove il criterio "Vincite" è la priorità 1, e se c'è un pareggio, il programma passerebbe ai criteri "Punti Speaker", e così su ...
Normalmente utilizzerei un meccanismo specifico per piattaforma (come LINQ
per Windows o NSSortDescriptor
per MacOS). Tuttavia, il progetto è "Codice condiviso" che dovrebbe essere compilato su qualsiasi piattaforma necessaria. Se è importante, sto utilizzando Silver
, un'implementazione del Swift
di Apple che compila per Windows / MacOS / iOS / Android / etc ... target, quindi fondamentalmente sono limitato all'utilizzo di "pure swift" (il codice di swift puro funziona perfettamente). Come posso implementare un Sort per farlo? Non mi interessa che l'algoritmo sia super efficiente (anche se non voglio che un semplice tipo impieghi delle ore, potrei farlo io stesso: P), un ordinamento di bolle modificato andrebbe bene fintanto che restituisse il corretto ordinato di. ID
Come complicazione, il numero di criteri è anche una variabile: questa volta potrebbe essere wins
e speakerPoints
, ma la prossima volta potrebbe includere opponentWins