lunes, diciembre 18, 2006

SmartSort v2: ordenar una lista de string en base a una clave en C# .NET - Sorting a string linked list using a word as a key in C# .NET

Segunda versión donde cambia la forma de tener en cuenta la diferencia de longitudes entre las dos palabras que se comparan, evitando así un posible error de índice fuera de rango a la hora de almacenar posteriormente las palabras en el array intermedio.


public System.Collections.Generic.LinkedList smartSort(
System.Collections.Generic.LinkedList lista,
string clave){

char[] auxs;
LinkedList auxl;
int nmatch;
int longi;

//creo un array de linkedlist de tamaño clave*2+1
LinkedList[] clasi = new LinkedList[clave.Length*2 + 1];

//obtengo los caracteres de la clave
char[] clavec = clave.ToCharArray(0,clave.Length);

//para cada una de las palabras de la lista inicial
IEnumerator enu = lista.GetEnumerator();
while (enu.MoveNext()){
nmatch = 0;
auxs = ((string)enu.Current).ToCharArray();

//me quedo con la menor de las longitudes
longi=clave.Length;
if (((string)enu.Current).Length < longi =" ((string)enu.Current).Length;" i =" 0;" i =" longi">= 0; i--){
if (clavec[i] == auxs[i]) nmatch++;
}

//ahora introducimos la diferencia entre longitudes de palabra
nmatch -= Math.Abs(clave.Length -
enu.Current.ToString().Length);
if (nmatch < nmatch =" 0;//controlamos">();
clasi[nmatch].AddLast(enu.Current.ToString());
}

//creo la lista a devolver
auxl = new LinkedList();
for (int i = clave.Length * 2; i >= 0; i--){
if (clasi[i] != null) {
enu = clasi[i].GetEnumerator();
while (enu.MoveNext()){
auxl.AddLast(enu.Current.ToString());
}
}
}

//devuelvo la lista
return auxl;
}

9 comentarios:

Anónimo dijo...

Pero vamos a ver.... ¿Qué cojones estás ordenando tú?, en que lenguaje?, te drogas para codificar.... acaso eres Uruguayo... Ni de coña te compila esa mierda que has pegado en el HTML... Es muy bonito robarle el código a alguien, ponerle unas comillas a una 'Sentencia CondicionalIterativa'... Menuda mierda tio... Si curras de pikatecklas en algún lado... te aconsejo cambies de curro y vayas a mamasla por ahí.... MIERDA TIO... Y, por si eres inglés, aunque lo dudo por tu mierda de nombre, Your Code Shrink o como cojones se diga, da igual... si no sabes codificar tampoco sabes inglés...

Ha sido un placer SUBNORMAL

Anónimo dijo...

Estoy de acuerdo con lo que dijo Anónimo y quisiera añadir unas palabras más:

1º Con muñones no puedes ser programador o si es asi comprate un teclado más grande.

2º En el bloc de notas la tecla F5 no es la de depurar, por si crees que todavía tú código no tiene errores.

Y por último y como deseo personal hacia ti, espero que los monos no aprendan a teclear ya que te verías en una situación comprometida.

Anónimo dijo...

Coooosaaaa mas fea de código... ni compila!!! ni con bateria... vamos que no va ni en el block de notas xDDDD.

Me uno a la opinion de Anónimo y de Anónimo pues creo que ambos reflejan en sus comentarios lo que pensamos todos... "Que no tienes ni idea de programar" y digo yo... por qué te haces un blog de programación? podrías hacer uno de frases célebres o de chistes cortos... o era eso lo que intentabas?

De cualquier forma, no seáis demasiado duros con Pedro Luis, no sabemos si sufre algún deficiencia neuronal severa...

O si lo sabemos...

pedromateo dijo...

A ver, aclaramos unas cosas:
- lo primero es que el código está mal porque parece ser que al pasarlo al post se me olvidó ponerlo dentro de la etiqueta "pre" y todas las lineas con una longitud superior al ancho del espacio destinado al post en este blog salen cortadas (lo sientoooo!!!!). Cuando tenga tiempo intentaré volverla a poner.
- segundo decir que me parece muy sospechoso (y digno de una casualidad pasmosa) que los tres mensajes sean correlativos y se hayan escrito seguidos, por lo que creo que en vez de tres personas se trata de alguien con triple personalidad, o que es tan bueno que escribe con tres teclados a la vez ¿te aburrías delante de tu ordenador después de comer?.
- por ultimo, hay muchas cosas que me demuestran lo listo o lista que eres, como tu facilidad de insultar y poner en tu nick "anónimo" (eres valiente, sigue así!!!), no saber en que lenguaje está escrito (cuando lo tienes en el título del post) y no intuir, por lo menos, lo que estoy ordenando si te las das de programador experimentado y de calidad (no deberías descuidar tu honroso, merecido y bien remunerado puesto de trabajo en google para ver blogs de mierda como éste).

Si has ido a hacer daño, no te des por satisfecho/a, no lo has conseguido, porque si no hubiera quitado los "comentarios de mierda" y con poca capacidad crítica que acabas de hacer.
Por otra parte, vuelvo a pedir perdón e intentaré que no vuelva a ocurrir, sobre todo por los que estén mínimamente interesados en algo de lo que hay en este blog.

Espero que leas este comentario, por lo menos para que tú también recibas tu parte.
Un abrazo.

Anónimo dijo...

No te ofendas hombre, si te hemos dicho que no sabes programar, es sólo por tu bien, que vas por ahí haciendo el ridículo y no es plan. Y para que vayas mejorando técnica, te daré un consejo gratuíto:
'Si en tu propio WebSite pones una página que se llama Curriculum, y a la que todo el mundo puede acceder, dígnate a poner algo y no dejarla en blanco, podrías ser víctima de burlas y risas del personal'.

Para finalizar, te felicito tanto por tu blog como por tu Sitio Web, me han alegrado mucho el viernes, a mí, y a la mitad de la empresa ;)

Anónimo dijo...

Bueno yo lo mio lo decia en broma, sólo pa seguirla. El caso es que el código apesta, pero no sólo porque se haya cortado. Si lo ves con IExplorer se ve entero y aún así... vamos creo que deberías comprobar los códigos (copilarlos, ejecutarlos y esas cosas) antes de ponerlos en tu Blog. Vamos si esperas que te tomen en serio.

Un saludooooo...

Anónimo dijo...

Ayy mi niño que se ofendio (aunque no lo admita)... lo primero es que si haces una cosa, vamos a poner en este caso una entrada en tu SuperBlog y no revisas lo hecho ya me estas diciendo mucho de como eres programando y lo segundo es que si miramos en Google para ver códigos es porque trabajamos a la japonesa, sacamos lo mejor de cada código y perfeccionamos el resto, lástima que con tu código no podamos aprovechar nada.

Bueno te dejo que hay gente que trabaja para aumentar su curriculum...

pedromateo dijo...

Ya veo que lo primero que haceis cuando llegais al curre por la mañana... jejeje, yo quiero un curro de esos.

La verdad es que estos comentarios están bastante mejor (por lo de que ya no insultais y eso), e incluso ya me ha dado la curiosidad de poder ver algún ejemplo de código superavanzado de los que haceis, no es por nada sino por aprender algo más (ya que llevo un par de meses programando en c#.net), ya que solamente me estoy dedicando a hacer un corrector ortográfico multilingüe que no tiene complicación alguna (de ahí viene el método de ordenar una lista de palabras, con el fin de ofrecer al usuario el resultado mas parecido a la palabra en la que erró éste, para lo que tengo que buscar coincidencias por el inicio y por el final).

Por otra parte, está clarísimo que el código es infinitamente mejorable, pero si echais un ojo al resto del blog, la mayoría del código es de un nivel bastante básico (ver el post de "cómo leer un fichero en c#.net"), y lo pongo aquí para los que como yo, no somos muy amigos de los manuales y preferimos sacar las prácticas de las asignaturas fijándonos en ejemplos que hay por ahí (algo parecido a lo que decís que haceis, pero en amateur xD).

Espero que sigais criticando (constructivamente, claro) lo que hago si en alguna de esas búsquedas que haceis volveis a topar conmigo, aunque conociendo los trabajos de informático supongo que ireis hasta el culo de trabajo, pero me interesaría ir mejorando y aprendiendo cosas nuevas.

Nada más, me piro a mi silla de la biblioteca...

PD: mi web está a medio hacer porque no tengo tiempo... podríamos tratar ese tema otro día.

pedromateo dijo...

Por cierto, en mi Visual Studio 2005 compila perfectamente.