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))