El módulo std/array provee sort_int y sort_str para ordenar in-place arrays numéricos y de strings respectivamente. Ambas funciones ordenan de forma ascendente y retornan el mismo array que mutaron.
// Ordenamiento: sort_int() de std/array + bubble sort manual import "std/array" fn print_array(arr: Array) { var s: String = "[" var i: int = 0 while i < arr.length() { let v: int = arr[i] s = s + int_to_string(v) if i < arr.length() - 1 { s = s + ", " } i = i + 1 } s = s + "]" print(s) } // El mismo recorrido para arrays de String: el tipo del elemento se declara // al leerlo (`let v: String`), porque un Array no lo lleva consigo: anotar // `int` acá imprimiría la dirección de cada string en vez del texto. fn print_array_str(arr: Array) { var s: String = "[" var i: int = 0 while i < arr.length() { let v: String = arr[i] s = s + v if i < arr.length() - 1 { s = s + ", " } i = i + 1 } s = s + "]" print(s) } fn main() -> int { var nums: Array = [64, 25, 12, 22, 11, 90, 3, 47, 8, 55] print("Antes de ordenar:") print_array(nums) // sort_int ordena in-place y retorna el array let ordenado: Array = sort_int(nums) print("Despues de ordenar:") print_array(ordenado) // Otro ejemplo: strings var palabras: Array = ["manzana", "banana", "cereza", "aguacate"] print("Strings antes:") print_array_str(palabras) let ord_str: Array = sort_str(palabras) print("Strings despues:") print_array_str(ord_str) return 0 }
Antes de ordenar: [64, 25, 12, 22, 11, 90, 3, 47, 8, 55] Despues de ordenar: [3, 8, 11, 12, 22, 25, 47, 55, 64, 90] Strings antes: [manzana, banana, cereza, aguacate] Strings despues: [aguacate, banana, cereza, manzana]
Cómo funciona
sort_int(nums) ordena el array in-place y lo retorna, así que el valor de retorno y la variable original referencian la misma secuencia ya ordenada. Se puede usar el valor de retorno o seguir usando la variable original — ambos apuntan a los datos ya ordenados.
sort_str funciona de forma idéntica para arrays de strings, ordenando los elementos lexicográficamente (byte por byte, de forma ascendente). En el ejemplo, "aguacate" se ordena primero porque 'a' precede a 'b', 'c' y 'm'.
Las funciones auxiliares print_array y print_array_str demuestran el recorrido manual de un array con un loop while y una variable índice — el patrón estándar de Nyx cuando se necesita acceso por índice en lugar de un pipeline de iteradores. Son dos porque un Array no lleva consigo el tipo de sus elementos: el recorrido lo declara al leer, y leer un array de strings como int imprimiría la dirección de cada string en vez de su texto.