Como ordenar una tabla numerica?

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
Hola

Vereis, necesito ordenar (sort) una tabla que empieza por numeros. El problema es que contiene por ejemplo 20.000 entradas esa tabla. Y las ordena mal, ejemplo:

1
11122
223
23333333333333
4
555
63

Lo que quiero es que lo ordene de mayor a menor, es decir:

23333333333333
11122
555
223
63
4
1

Edit: se me olvidaba comentar, que despues de los numeros vienen letras, no se si esto afectara. Ejemplo: 63 Castillos.

Alguna sugerencia para el table.sort?

Muchas gracias
tabla = {"13 camiones", "45456 castillos"}; -- tabla

FindSpace = String.Find(tabla[1], " ", 1, false); -- busco el spacio
num = String.Mid(tabla[1], 1, (FindSpace-1)); -- num = el numero
se me ocurre como conseguir el numero siempre y cuando uses espacios, perdona pero esto espesisismo
Bueno Amigo
Espero te Sirva esto lo he probado y funciona
Este ejemplo esta en el Help de AMS8.
--*Funcion que ordenara los numeros
	function sorter(v1,v2)
    	if (v1 > v2)then
        	return true;
   		 else
        	return false;
   	 	end
	end

--*Creo una Tabla con los valores
	tValor = {1, 11122, 223, 23333333333333, 4, 555, 63};
	Table.Sort(tValor, sorter);--Te ordena de mayor a menor
	--[[ Si colocas nil en vez de sorter te ordenara de menor a mayor ]]
--*Abrimos 
	Debug.ShowWindow(true);
	Debug.Clear();
	for j, k in pairs(tValor) do
		Debug.Print(k.."\r\n");
	end
Con respecto a los valores AlfaNumericos muestrame como quieres que te ordene y vemos que magia hacemos.
geran esa es la forma normal de ordenar valores numéricos, el royo esta en que los valores incluyen letras, ese modo creo que viene descrito en la misma ayuda de AMS... :D

pero bueno la intención es lo que cuenta!
Ceone escribió:geran esa es la forma normal de ordenar valores numéricos, el royo esta en que los valores incluyen letras, ese modo creo que viene descrito en la misma ayuda de AMS... :D

pero bueno la intención es lo que cuenta!
Que tal ceone, entiendo la pregunta aass, por eso le pido que nos pase mas valores del tipo que incluye letra por lo menos unos diez. Porque la pregunta esta como quiere que se ordene Por ejemplo 23 mesas, 64 sillas, 74 camas, etc. Podemos ordenarlos por el valor numerico o por el abcedario.

Por Numeros

74 camas
64 sillas
23 mesas

Por abcedario

74 camas
23 mesas
64 sillas

Y como dice aass la table tiene 20.000 entradas, pienso que seria mejor crear dos tablas temporales y que contenga los valores numericos y la otra los valores alfanumericos y luego trabajar con ellas.
ni una ni otra
aca 3 opciones
1seria si acaso una tabla con 2 campos por indice: tabla[1] = {24,sillas}
2usar string.match con patrones como [%d]+ y [%w]+ dentro de una funcion sorter
3pasar la tabla a una db y ordenar desde la consulta select * from tabla order by campo
Esta interesante la respuesta de ams8user, creo que es una buena opcion y se utilizaria menos scripting, Pensaba tambien utilizar string.gmatch o algo parecido, pero eso de la base de datos seria buena opcion. Pero como digo, necesitamos que nos pase mas valores.
soy un chingón:
function sortbynum(v1,v2)
	local a,b = tonumber(string.match(v1, "[%d]+")), tonumber(string.match(v2, "[%d]+"));
	if (a < b)then
		return true;
	else
		return false;
	end
end
function sortbytitle(v1,v2)
	local a,b = string.match(v1, "[%a]+"), string.match(v2, "[%a]+");
	if (a < b)then
		return true;
	else
		return false;
	end
end
tabla = {};
tabla[1] = "14 camas"
tabla[2] = "13 mesas"
tabla[3] = "9 sillas"
tabla[4] = "20 casas"
tabla[5] = "1 anaquel"
ahi tienen para ordenar por titulo o por cantidad de menos a mas las dozzzzzzzzzz
si regalan una flor diciendo "una flor para otra flor", a mi me regalarin una pito porque soy una vergaaaaaaaaaaa jajajajajajaja
ya lod e la pinchi db es pan comido
ams8user, muchas gracias por el código pero por favor la próxima vez introdúcelo dentro de su BBcode porque así está mas ordenado y es más fácil de copiar. Gracias.

Saludos!!!
Muchas gracias ams8user

Funciona perfectamente!!
El metodo que usaría yo seria a traves de un sorter

Usando Table.Sort(...) y con una funcion callback sorter que ordene por String.Lenght(...)

Del rollo
tableee={"aaaaaaaaa","aa","aaaa","aaa","a","aaaaaaaaaaaaaaaaaaaaaaaa"}

function sorter_length_plus_minus(v1,v2)
    if (String.Length(v1) > String.Length(v2))then
        return true;
    else
        return false;
    end
end

function sorter_length_minus_plus(v1,v2)
    if (String.Length(v1) < String.Length(v2))then
        return true;
    else
        return false;
    end
end



Table.Sort(tableee, sorter_length_plus_minus);


Dialog.Message('',Table.Concat(tableee, ";", 1, TABLE_ALL))