2009-08-17 17 views
5

en Python que puede hacer algo como esto:Lista de llenado <int> usando LINQ

arr = list(set(randint(-50, 50) for _ in range(10))) 

sé cómo programar un método de extensión que llena una matriz, lista o lo que sea necesario con valores aleatorios. Me parece engorroso, y realmente admiro cómo se puede hacer en Python. Aunque, solo sé de Enumerable.Range, que solo se puede usar para generar secuencias fijas, que yo sepa.

¿También es posible en C#?

Respuesta

10

Se podría hacer como esto:

Random rnd = new Random(); 
List<int> = Enumerable.Range(0,10).Select(n => rnd.Next(-50, 51)).ToList(); 
+0

Ah, simplemente no pude encontrar la manera de invocar select junto con Enumerable.Range. ¡Gracias! – CasperT

+0

+1 Esa es la solución que acabo de armar también, pero me ganaste. –

+0

¿No es posible que devuelva números duplicados en la lista? –

2
var r = new Random(); 

var l = Enumerable.Range(10).Select(x => r.Next(100) - 50).ToList(); 
+1

Esto no compila. 'Enumerable.Range' toma dos argumentos: iniciar y contar. Necesita pasar un 0 como primer argumento. – adrianbanks

+0

Sí, no revisé. – leppie

2

Claro, Algo así como ...

Random r = new Random(); 
var ints = Enumerable.Range(0, 50).OrderBy(i => r.Next()); 
+0

Nota, esta es más como una mezcla (si eso es lo que buscas) de otro modo la selección es la mejor respuesta. –

+0

Tenga en cuenta que hay un ligero sesgo con ese método cuando obtiene números aleatorios duplicados. El mejor método de mezcla es un clásico de Knuth, que se describe aquí: http://stackoverflow.com/questions/1262480/how-to-shuffle-a-listt/1262521 – Guffa

1

sólo para añadir una variante, se podría crear un método estático muy simple como esto :

public static IEnumerable<int> RandomSequence(int minValue, int maxValue) 
    { 
     Random r = new Random(); 
     while (true) 
      yield return r.Next(minValue, maxValue); 
    } 

Y luego úsala como thi s:

var numbers = RandomSequence(-50, 50).Take(10)); 

    foreach(var number in numbers) 
     Console.WriteLine(number); 

Me encanta yield return ... jeje c",)

Cuestiones relacionadas