Muchas veces me topé (y me seguiré topando), con situaciones en las cuales no sé cómo resolver algo. Y cuando encuentro la forma me hace muy feliz. Así que quiero en este post ir subiendo esos “pequeños trucos” a medida que me vayan saliendo.

INTERCAMBIAR ELEMENTOS (SWAP)

Muchas veces nos topamos con esta situación al trabajar con arrays. O incluso al trabajar con multiples elementos que no necesariamente están en un array (quizás sólo están por ahí sueltos conectados de otra manera). Imagino que ya conocerán la clásica manera de crear una variable temporal y asignar el valor.

 

Copy to Clipboard

 

Hay una “alternativa” a esto que es un poco más usada en C# 7 (.NET 6), y es usar tuplas. Para el que no sepa qué son les dejo este enlace a la documentación (ya que no es el punto de este post). Pero básicamente usando tuplas nos quedaría de esta manera:

 

Copy to Clipboard

 

Queda de una manera bastante más corta y es un “método alternativo”. Les dejo a continuación, por si lo quieren probar, un ejemplo funcionando.

 

SHUFFLE (mezclar elementos)

Hay muchas maneras de mezclar una lista de elementos en el array. Quizás si revisamos algunas más técnicas podríamos rápidamente llegar al Algoritmo de Fisher-Yates. En mi opinión, quizás vale la pena ahondar en estos algoritmos si tu juego se basa explícitamente en mezclar cosas y de maneras diferentes. Pero si es algo que sólo vas a usar una vez, o en un lugar, o para alguna cosa muy concreta, quizás vale la pena usar un martillo como tope de puerta si eso soluciona el problema (y es lo que tenemos a mano). Igualmente me refiero más a pensar un poco fuera de la caja y usar herramientas que fueron pensadas para otra cosa. Por ejemplo, en mi caso en particular algo que me sirvió mucho en su momento es usar el método OrderBy de LINQ. Y… Cómo usar para desordenar un algoritmo que fue pensado para ordenar? Fácil… Repasemos primero cómo funciona el método OrderBy.

Imaginemos que querémos ordenar un grupo de usuarios por su edad. Haríamos algo como esto:

 

Copy to Clipboard

 

Esto imprimiría en pantalla lo siguiente:

 

Copy to Clipboard

 

Ahora, volviendo al punto, cómo usamos algo que fue pensado para ordenar, para desordenar? Si se fijan, ese valor que le pasamos a OrderBy lo que hace es usarlo para definir cuál va primero. Lo que yo hice para que desordene el array fue… (* ruido de  tambores *)… Pasarle un número random en cada iteración. Je.

Vamos a mostrar el ejemplo:

 

Copy to Clipboard

 

Básicamente en cada iteración recibiría un valor completamente aleatorio, por lo que ordenaría siempre de maneras diferentes. Prueben ejecutar el programa por ustedes mismos y ver qué pasa.

 

 

Y con esto tenemos una solución práctica con una herramienta que ya viene con C#.

 

PEQUEÑA ACLARACIÓN

Si no saben qué es el guion bajo que usé en la línea del OrderBy para el ejemplo, significa que no voy a usar esa variable. Es un operador de descarte.

CONTINUARÁ… (cuando me sucedan más cosas).