rellenar con rand variable ya cargada de datos

Iniciado por luis456, 9 Abril 2015, 14:35 PM

0 Miembros y 1 Visitante están viendo este tema.

luis456

 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

Código (vbnet) [Seleccionar]
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

Código (vbnet) [Seleccionar]
If Resultados.Count < 30 Then
           
          Resultados = numerosFaltantesdelRango

       End If





Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

ivancea96

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.

luis456

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
Que tu sabiduria no sea motivo de Humillacion para los demas

ivancea96

Para el ejemplo que di antes, si ya hay valores, basta retirar inicialmente los valores que ya hay del vector.

DarK_FirefoX

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?

luis456

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

Código (vbnet) [Seleccionar]
Dim Resultados As IEnumerable(Of Integer) 

Luis


Que tu sabiduria no sea motivo de Humillacion para los demas

DarK_FirefoX

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?

Eleкtro

#7
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...

Código (vbnet) [Seleccionar]

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








luis456

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...

Código (vbnet) [Seleccionar]

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


                       


Que tu sabiduria no sea motivo de Humillacion para los demas