Otro de mis inventos :)
quiero rellenar con numeros aleatorios cuando la cuenta de la variable este por debajo de 30, el rango de estos numeros es 00 al 99, pero no deberian de repetir en la variable.
tengo esto que rellena pero con ceros
If Resultados.Count < 30 Then
Resultados = Resultados.Concat(Enumerable.Repeat(Of Integer)(0, (30 - Resultados.Count)))
End If
entonces se me ocurrio esto pero nunca me da la seguridad de tener como minimo 30 datos en la variable :( a veces el programa entero no llega a esa cantidad y FALLO
If Resultados.Count < 30 Then
Resultados = numerosFaltantesdelRango
End If
Luis
Si quieres insertar sin repetición 30 números del 0 al 99, puedes cargar un vector con las 100 posibilidades, y luego ir eligiendo al azar, e insertando. Al insertar, lo borras del vector para evitar duplicados.
Cita de: ivancea96 en 9 Abril 2015, 14:49 PM
Si quieres insertar sin repetición 30 números del 0 al 99, puedes cargar un vector con las 100 posibilidades, y luego ir eligiendo al azar, e insertando. Al insertar, lo borras del vector para evitar duplicados.
No es meter o insertar 30 numeros es completar explico, si hay 25 numeros la funcion rand debera de llegar a completar la diferencia sin repetir los numeros :) porque si no lo que podria hacer es sumar otra variable cargada fija a la otra y utlizar " distint" para eliminar repetidos :)
Gracias por responder
Luis
Para el ejemplo que di antes, si ya hay valores, basta retirar inicialmente los valores que ya hay del vector.
Si entendí bien, digamos que en resultado tienes una serie de números como "resultado" de algo, y quieres con la función rand, llegar a 30 números sin que se repita ninguno de los anteriores!
¿Que cosa es la variable resultado?
Cita de: DarK_FirefoX en 9 Abril 2015, 15:25 PM
Si entendí bien, digamos que en resultado tienes una serie de números como "resultado" de algo, y quieres con la función rand, llegar a 30 números sin que se repita ninguno de los anteriores!
¿Que cosa es la variable resultado?
Hola
si la variable se llena con una funcion que tengo, esta funcion genera numeros que van desde 00 al 99 pero a veces esta funcion genera menos de 30 numeros y como utilizo otras particiones para formar claves numericas si no llega a este minimo el programa me da error
Y me imagino que preguntas por esto de la variable y es la debe de tener mas de 30 registros
Dim Resultados As IEnumerable(Of Integer)
Luis
A ver, yo me pierdo un poco con la sintaxis de VB.NET, entonces, te voy a tratar de explicar lo que yo haría:
Tuviera un array de bool con un tamaño de 100 (00 a 99), entonces cada vez que tu función genere un número lo guardas normal, pero en este array de bool indexas en ese número y lo pones en true, y así sucesivamente, luego, cuando vayas a generar tus números con rand (en caso de que lo necesites, si el count<30), lo capturas antes de agregarlo a resultado e indexas y chequeas en ese array de bool a ver si está en true, si esta en true, calculas otro aleatorio, sino, lo insertas y lo pones en true. De esta manera evitaras tener valores repetidos
Me explico?
No hay manera, he, luis?.
En el siguiente ejemplo, tengo una colección del 1 al 5, y relleno la colección con números aleatorios del 1 al 10 sin que estos se repitan entre ellos ni entre los números que ya hay en la colección, hasta incrementar la cantidad de elementos de la colección a 10.
Dicho de otra forma, tengo una lista del 1 al 5, genero una secuencia aleatoria del 1 al 10 y relleno la lista del 1 al 5 con los 5 números restantes del 5 al 10.
Puedes modificar los valores para tus necesidades...
Dim col As IEnumerable(Of Integer) = {1, 2, 3, 4, 5}
Dim minColCount As Integer = 10
Dim minRandValue As Integer = 1
Dim maxRandValue As Integer = 10
Dim rand As Random = New Random
If col.Count < minColCount Then
Dim randCol As IEnumerable(Of Integer) =
From value As Integer In Enumerable.Range(minRandValue, maxRandValue)
Order By rand.Next
Where Not col.Contains(value)
Take (minColCount - col.Count)
col = Enumerable.Concat(col, randCol.ToArray)
End If
Debug.WriteLine(String.Join("; ", col))
Saludos
Cita de: Eleкtro en 9 Abril 2015, 18:07 PM
No hay manera, he, luis?.
En el siguiente ejemplo, tengo una colección del 1 al 5, y relleno la colección con números aleatorios del 1 al 10 sin que estos se repitan entre ellos ni entre los números que ya hay en la colección, hasta incrementar la cantidad de elementos de la colección a 10.
Dicho de otra forma, tengo una lista del 1 al 5, genero una secuencia aleatoria del 1 al 10 y relleno la lista del 1 al 5 con los 5 números restantes del 5 al 10.
Puedes modificar los valores para tus necesidades...
Dim col As IEnumerable(Of Integer) = {1, 2, 3, 4, 5}
Dim minColCount As Integer = 10
Dim minRandValue As Integer = 1
Dim maxRandValue As Integer = 10
Dim rand As Random = New Random
If col.Count < minColCount Then
Dim randCol As IEnumerable(Of Integer) =
From value As Integer In Enumerable.Range(minRandValue, maxRandValue)
Order By rand.Next
Where Not col.Contains(value)
Take (minColCount - col.Count)
col = Enumerable.Concat(col, randCol.ToArray)
End If
Debug.WriteLine(String.Join("; ", col))
Saludos
Perfecto :) me lees la mente jejejje
Gracias otrar ves mas
Luis