Ordenación personalizada
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 51 de 78.
sort() ordena un arreglo de forma ascendente y modifica el propio arreglo. Los números van del más pequeño al más grande, y las cadenas siguen el mismo orden que min(), primero las mayúsculas. reverse() después las ordena de forma descendente:
var scores := [40, 95, 12, 70]
scores.sort()
print(scores) # [12, 40, 70, 95]
scores.reverse()
print(scores) # [95, 70, 40, 12]Para cualquier otro orden, llama a sort_custom() con una función de comparación. Recibe dos elementos, a y b, y devuelve true cuando a debe ir antes que b. Pasa la función por su nombre, sin paréntesis:
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"]La comparación puede mirar dentro de los elementos. Esta coloca primero el diccionario con más "hp":
func by_hp(a: Dictionary, b: Dictionary) -> bool:
return a["hp"] > b["hp"]La ordenación no es estable: los elementos que se comparan como iguales pueden acabar en cualquier orden. Cuando los empates importan, compara un segundo campo cuando el primero sea igual:
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() existe en Array, pero no en PackedStringArray, que es lo que devuelve split(), así que primero conviértelo con Array(...). También encontrarás la comparación escrita en línea, como en sort_custom(func(a, b): return a > b). Esa forma es una función lambda, que se aborda en el capítulo Funciones avanzadas.
Desafío
FácilEl programa lee dos líneas: números enteros separados por espacios y palabras separadas por espacios. El código dado los almacena en numbers (un array de enteros) y words (un array de cadenas).
- Escribe una función de comparación
by_length(a: String, b: String) -> boolen el nivel superior. Las palabras más cortas van primero y las palabras de la misma longitud se ordenan alfabéticamente. - Imprime cuatro líneas: los números en orden ascendente, los números en orden descendente, las palabras en orden alfabético (con
sort()) y las palabras ordenadas consort_custom(by_length).
Para las entradas 5 3 8 1 2 y elephant cat dolphin bee, la salida es:
Ascending: [1, 2, 3, 5, 8]
Descending: [8, 5, 3, 2, 1]
Alphabetical: ["bee", "cat", "dolphin", "elephant"]
By length: ["bee", "cat", "dolphin", "elephant"]Pruébalo tú mismo
extends Node
# Escribe aquí la función de comparación 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))
# Ordena los arrays e imprime las cuatro líneas
pass
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Cadenas de texto en profundidad
Métodos de cadenasBúsqueda en cadenasReemplazar y eliminar espaciosDividir y unirRepaso - Comprobación del nombre de usuario4Diccionarios, parte 2
Diccionarios anidadosArrays de diccionariosCombinar diccionariosCopiar diccionariosRepaso: contador de frecuencias7Enumeraciones
¿Qué es una enumeración?Definir una enumeraciónValores de una enumeraciónEnumeraciones en matchRepaso: semáforo10Funciones avanzadas
Devolver múltiples valoresFunciones lambda, parte 1Funciones lambda, parte 2Repaso: ordenar con lambdaFunciones recursivas, parte 1Funciones recursivas, parte 2Repaso: sumar un array anidado13Sistema de gestión de inventario
Descripción general del proyectoAñadir artículo2Toma de decisiones avanzada
Coincidencia con variablesGuardas de coincidenciaPatrones de arraysPatrones de diccionariosComprobaciones de pertenenciaRepaso: analizador de comandos5Aplicación de agenda de contactos
Mostrar menúAñadir contacto8Gestor de expedientes estudiantiles
Descripción del proyectoAgregar estudiante3Arrays multidimensionales
Conceptos básicos de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DRepaso: arrays 2DArrays irregularesPatrones comunes de arrays 2DRepaso: tablero de juego6Conjuntos con diccionarios
¿Qué es un conjunto?El diccionario como conjuntoAñadir y eliminarUnión e intersecciónDiferencia de conjuntosRepaso: eliminar duplicados9Agregación avanzada de datos
Suma de valoresCómo encontrar el mínimo y el máximoOrdenación personalizadaRepaso: organizador de diccionariosPractica por tu cuenta: Compilador de GDScript online