Quiero generar una matriz que tiene 144 números de 1 a 36 en orden aleatorio (por lo que cada número se repite 4 veces). ¿Podemos usar Enumerable.Repeat y Enumerable.Range para hacer eso? Si es así, por favor explícame ¿cómo?Generar y repetir el número en C#
Respuesta
Bueno, la creación de la secuencia con todos los números en es fácil:
var items = from x in Enumerable.Range(1, 36)
from y in Enumerable.Repeat(x, 4)
select y;
a continuación, puedes utilizar ToArray
conseguirlo en una matriz y barájalo. Existen numerosas preguntas sobre cómo mezclar una matriz en C# en SO, como this one. Puede usar ese código directamente, o llamar al ToArray
y mezclar la matriz en su lugar sin cederla al final.
int[] numbers = Enumerable.Range(0, 144).Select(i => (i % 36)+1).OrderBy(g => Guid.NewGuid()).ToArray();
Probablemente no es importante en este caso, pero esta manera de mezclar termina siendo O (n log n) donde solo tiene que ser O (norte). –
// Generate the list (not in random order)
var one_to_36 = Enumerable.Range(1, 36);
var lst = one_to_36.Concat(one_to_36).Concat(one_to_36).Concat(one_to_36).ToList();
// Randomize the list by swapping random elements
Random rnd = new Random();
for(int i = 0; i < lst.Count; i++)
{
int i1 = rnd.Next(lst.Count);
int i2 = rnd.Next(lst.Count);
int tmp = lst[i1];
lst[i1] = lst[i2];
lst[i2] = tmp;
}
Al intercambiar elementos aleatorios de esta forma no se obtiene una buena distribución aleatoria; hay una forma mejor de barajar una colección, como se relaciona en mi respuesta. –
No me di cuenta de eso ... gracias por la propina –
var seq = Enumerable.Range(0, 144);
var all = seq.ToList();
var random = new Random();
var result = seq.Select(i => {
var index = random.Next()%all.Count;
var r = all[index] % 36 + 1; all.RemoveAt(index);
return r;
}).ToList();
- 1. Repetir imagen en C#
- 2. Generar un número aleatorio con el preprocesador C
- 3. ¿Cómo repetir algo un determinado número de veces en JSTL?
- 4. Dejar de repetir^C en la terminal
- 5. ¿Cómo puedo generar un número pseudoaleatorio criptográficamente seguro en C#?
- 6. Dirección en C: Y (número)
- 7. sympy set: repetir en intervalos
- 8. Generar número aleatorio entre dos números con una rara número
- 9. 'Repetir' en Haskell?
- 10. Cómo repetir/repetir el tono de llamada actual en Android desde una aplicación?
- 11. Java Generar número aleatorio {-1,0,1}
- 12. ¿Cómo generar un número aleatorio en Bash?
- 13. generar un número aleatorio corto en java?
- 14. Generar automáticamente el número de serie en gridview
- 15. ¿Cómo puedo repetir el alfabeto en Visual Basic?
- 16. ¿Puedo repetir el comando en irb?
- 17. C++ Generar el constructor estándar
- 18. ¿Generar un número aleatorio dentro del rango?
- 19. Generar en C#
- 20. ¿Cómo obtengo el número de mes del año y el número de semana en C#?
- 21. ddply + resumen para repetir la misma función estadística en un gran número de columnas
- 22. ¿Cómo puedo repetir cadenas en JavaScript?
- 23. Generar y analizar el código Python desde la aplicación C#
- 24. Generar sha256 con OpenSSL y C++
- 25. generar aleatoria de 64 bits número entero
- 26. Fecha y hora en el número entero
- 27. Algoritmo para generar un número aleatorio
- 28. Generar un número aleatorio de N-dígitos
- 29. generar un número aleatorio con 7 dígitos
- 30. Cómo generar hilo en C#
bueno, eso es más fácil de leer que mi solución. +1 –
y más elegante que mi Concat múltiple;) –
gracias por el comentario, pero ahora tengo que llenar la matriz generada a una matriz [9,16], ¿me puede sugerir una buena manera? –