Ordinamento personalizzato
Fa parte della sezione Logica e flusso del percorso GDScript di Coddy. Lezione 51 di 78.
sort() mette un array in ordine crescente e modifica l’array stesso. I numeri vanno dal più piccolo al più grande e le stringhe seguono lo stesso ordine di min(), prima le maiuscole. reverse() imposta quindi l’ordine decrescente:
var scores := [40, 95, 12, 70]
scores.sort()
print(scores) # [12, 40, 70, 95]
scores.reverse()
print(scores) # [95, 70, 40, 12]Per qualsiasi altro ordine, chiama sort_custom() con una funzione di confronto. Riceve due elementi, a e b, e restituisce true quando a deve precedere b. Passa la funzione usando il suo nome, senza parentesi:
func by_length(a: String, b: String) -> bool:
return a.length() < b.length()
func _ready():
var words := ["banana", "fig", "kiwi"]
words.sort_custom(by_length)
print(words) # ["fig", "kiwi", "banana"]Il confronto può esaminare gli elementi. Questo mette per primo il dizionario con più "hp":
func by_hp(a: Dictionary, b: Dictionary) -> bool:
return a["hp"] > b["hp"]L'ordinamento non è stabile: gli elementi che risultano uguali nel confronto possono finire in qualsiasi ordine. Quando l'ordine in caso di parità è importante, confronta un secondo campo quando il primo è uguale:
func by_score_then_name(a: Dictionary, b: Dictionary) -> bool:
if a["score"] != b["score"]:
return a["score"] > b["score"]
return a["player"] < b["player"]sort_custom() è disponibile su Array, ma non su PackedStringArray che split() restituisce, quindi converti prima con Array(...). Incontrerai anche il confronto scritto direttamente, come in sort_custom(func(a, b): return a > b). Questa forma è una lambda, trattata nel capitolo Funzioni avanzate.
Sfida
FacileIl programma legge due righe: numeri interi separati da spazi e parole separate da spazi. Il codice fornito li memorizza in numbers (un array di int) e words (un array di stringhe).
- Scrivi una funzione di confronto
by_length(a: String, b: String) -> boolal livello principale. Le parole più corte vengono prima e le parole della stessa lunghezza sono in ordine alfabetico. - Stampa quattro righe: i numeri in ordine crescente, i numeri in ordine decrescente, le parole in ordine alfabetico (con
sort()) e le parole ordinate consort_custom(by_length).
Per gli input 5 3 8 1 2 e elephant cat dolphin bee, l'output è:
Ascending: [1, 2, 3, 5, 8]
Descending: [8, 5, 3, 2, 1]
Alphabetical: ["bee", "cat", "dolphin", "elephant"]
By length: ["bee", "cat", "dolphin", "elephant"]Provalo tu
extends Node
# Scrivi qui la funzione di confronto by_length()
func _ready():
var numbers: Array[int] = []
for text in OS.read_string_from_stdin().split(" ", false):
numbers.append(int(text))
var words := Array(OS.read_string_from_stdin().split(" ", false))
# Ordina gli array e stampa le quattro righe
pass
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Stringhe in dettaglio
Metodi delle stringheRicerca nelle stringheSostituzione e trimDividere e unireRipasso - verifica del nome utente4Dizionari - Parte 2
Dizionari annidatiArray di dizionariUnire dizionariCopiare dizionariRiepilogo - Contatore di frequenza7Enumerazioni
Che cos'è un'enumerazione?Definire un'enumerazioneValori dell'enumerazioneEnumerazioni in MatchRiepilogo - Semaforo10Funzioni avanzate
Restituire più valoriFunzioni lambda - Parte 1Funzioni lambda - Parte 2Ripasso - Ordinamento con lambdaFunzioni ricorsive - Parte 1Funzioni ricorsive - Parte 2Ripasso - Somma di un array annidato13Sistema di gestione dell'inventario
Panoramica del progettoAggiungere un articolo2Decisioni avanzate
Match con variabiliGuardie di matchPattern per arrayPattern per dizionariVerifiche di appartenenzaRiepilogo - Parser di comandi5Applicazione Rubrica
Visualizzare il menuAggiungere un contatto8Gestione dei registri degli studenti
Panoramica del progettoAggiungi studente11Funzioni di ordine superiore
Il metodo mapIl metodo filterIl metodo reduceany e allRipasso - Validatore di emailRipasso - Elaboratore di numeri3Array multidimensionali
Fondamenti degli array 2DAccedere agli elementi di un array 2DCicli annidati con array 2DRipasso - Array 2DArray frastagliatiSchemi comuni con gli array 2DRipasso - Tabellone di gioco6Insiemi con i dizionari
Che cos'è un insieme?Il dizionario come insiemeAggiungere e rimuovereUnione e intersezioneDifferenza tra insiemiRiepilogo - Rimuovere i duplicati9Aggregazione avanzata dei dati
Somma dei valoriTrovare minimo e massimoOrdinamento personalizzatoRiepilogo - Ordinatore di dizionariEsercitati da solo: Compilatore GDScript online