Prima di tutto devo specificare che sto lavorando in Unity 5.3 e che il nuovo MonoDevelop non mi permette di eseguire il debug. Unità appena si blocca :(Cosa c'è di sbagliato nel mio ordinamento?
quindi ho una lista di "obiettivi" che ho bisogno di ordinare in base a 3 criteri:
- primo dovrebbe essere elencato gli obiettivi di "attivi"
- poi ordinato da difficoltà livello
- finalmente in modo casuale per gli obiettivi dello stesso livello
ecco un mio codice:
public class Goal {
public int ID;
public int Level;
public bool Active;
}
...
List<Goal> goals;
goals.Sort((a, b) => {
// first chooses the Active ones (if any)
var sort = b.Active.CompareTo(a.Active);
if (sort == 0) {
// then sort by level
sort = (a.Level).CompareTo(b.Level);
// if same level, randomize. Returns -1, 0 or 1
return sort == 0 ? UnityEngine.Random.Range(-1, 2) : sort;
} else {
return sort;
}
});
Quando eseguo questo codice a volte ottengo uno o più obiettivi attivi dopo quelli inattivi, ma non capisco perché.
È possibile limitare il comportamento a un set specifico di input? –
Il problema probabilmente ha a che fare con l'ordinamento che non è univoco. Cioè: qualsiasi ordine dato * potrebbe * essere corretto, ma a causa della randomizzazione di articoli con priorità uguale, qualsiasi tentativo di verificare questo ordine restituirà un ordine diverso. Troverò un modo diverso per mischiare le cose – Draco18s
Puoi fornire un esempio di input che riproduca (o abbia una possibilità di riprodurre) il problema? –