Página 1 de 1
Como ordenar una tabla numerica?
Publicado: 27 Mar 2011 18:30
por aass
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
Re: Como ordenar una tabla numerica?
Publicado: 27 Mar 2011 20:48
por Ceone
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
Re: Como ordenar una tabla numerica?
Publicado: 31 Mar 2011 07:10
por Geran
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
Re: Como ordenar una tabla numerica?
Publicado: 31 Mar 2011 07:14
por Geran
Con respecto a los valores AlfaNumericos muestrame como quieres que te ordene y vemos que magia hacemos.
Re: Como ordenar una tabla numerica?
Publicado: 31 Mar 2011 12:46
por Ceone
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!
Re: Como ordenar una tabla numerica?
Publicado: 31 Mar 2011 16:30
por Geran
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.
Re: Como ordenar una tabla numerica?
Publicado: 31 Mar 2011 16:42
por ams8user
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
Re: Como ordenar una tabla numerica?
Publicado: 31 Mar 2011 16:59
por Geran
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.
Re: Como ordenar una tabla numerica?
Publicado: 31 Mar 2011 22:04
por ams8user
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
Re: Como ordenar una tabla numerica?
Publicado: 31 Mar 2011 22:30
por Daniel_Lechu
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!!!
Re: Como ordenar una tabla numerica?
Publicado: 01 Abr 2011 20:36
por aass
Muchas gracias ams8user
Funciona perfectamente!!
Re: Como ordenar una tabla numerica?
Publicado: 02 Abr 2011 16:34
por Pabloko
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))