Comportamiento Indefinido

Diciembre 13, 2007

NaturalSort

Archivado en: Articulos, Programación — Etiquetas:, — DavidGR @ 11:05 pm

idea original: www.codinghorror.com
Si le mostramos la siguiente secuencia de archivos a una persona normal (léase no-programador):

  • abc1.txt
  • abc10.txt
  • abc100.txt
  • abc15.txt
  • abc2.txt
  • abc3.txt
  • abc45.txt
  • abc6.txt


Nos va a decir que esa secuencia se encuentra desordenada, mientras que si se la mostramos a un programador, probablemente nos diga que se encuentra en perfecto orden. Esta diferencia de razonamiento se debe a que el programador está acostumbrado a la forma en que los lenguajes ordenan una serie de cadenas.
Pero esta forma de ordenar (ASCIIbeticamente?) es generalmente confusa para el usuario que espera una forma mucho más natural:

  • abc1.txt
  • abc2.txt
  • abc3.txt
  • abc6.txt
  • abc10.txt
  • abc15.txt
  • abc45.txt
  • abc100.txt


El problema se origina en que los programadores llaman al ordenamiento del lenguaje y no le dedican mayor pensamiento, y si el programador quiere utilizar el ordenamiento más natural, se ve obligado a crear su propia implementación, debido a que prácticamente ningún lenguaje trae por defecto un ordenamiento “Natural” (NaturalSort de ahora en adelante).
Obviamente, si se desea una solución fácil, se puede simplemente preceder los números con una serie de ceros, quedando:

  • abc001.txt
  • abc002.txt
  • abc003.txt
  • abc006.txt
  • abc010.txt
  • abc015.txt
  • abc045.txt
  • abc100.txt


Que si bien funciona tiene la desventaja de que se debe saber por anticipado el rango que van a tener los archivos.

Si se busca en internet se pueden encontrar varias implementaciones del NaturalSort, pero lo divertido es tratar de implementarlo uno mismo.
Teniendo en cuenta que es una tarea bastante trivial, cualquier programador que se precie debería poder hacerla en 40 lineas o menos, lo dejo como desafío.

1 comentario »

  1. Muy buen post, la verdad.
    Bueno nada en fin salu2

    Saludos a Toda La Comunidad ! !

    Comentario por Agustin Polito — Enero 1, 2008 @ 4:24 am

Redifusión RSS de los comentarios de la entrada. URI para TrackBack.

Deja un comentario

Blog de WordPress.com.