Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - luis456

#191
Bien te paso el code con el problema fijate que con  " Values " no llega la cantidad para hacer funcionar el " splits(15) " ya que  " values " no llega a 35 numeros y me sale lo del error ese de que hablamos en el otro post. " null " y se me ocurrio esta idea que me parece perfecta para mi code jejej

Pero si vamos a "values2" veras que si tiene mas de 35 numeros con lo cual no da problemas el  " splits(15) "  y tu diras aja y porque no usamos solo values2 ? porque son dos variables que vienen de una funcion  y una ves "values " tiene mas que la otra y otras values2 se invierten las cantidades  y esto varia segun los calculos que hago.


Código (vbnet) [Seleccionar]
Public Class Form1
    ReadOnly MAX As Integer = 90
    Dim Rand As New Random
    Dim compuesto As IEnumerable(Of Integer)

    Private Sub Test() Handles MyBase.Shown
        Dim values As IEnumerable(Of Integer) =
            {
                1, 2, 3, 4,
                5, 6, 10, 11,
                14, 15, 54, 57,
                58, 60, 63, 64,
                65, 67
            }

        Dim values2 As IEnumerable(Of Integer) =
            {
                1, 2, 3, 4,
                5, 6, 10, 11,
                14, 15, 54, 57,
                58, 60, 63, 64,
                65, 67, 68, 69,
                70, 75, 78, 79, 80,
                81, 82, 86, 88, 89, 90, 92,
                93, 94, 95, 97, 98, 99
            }
       

        pondria en donde esta " values " a compuesto

        Dim splits As IEnumerable(Of IEnumerable(Of Integer)) =
            SplitIntoParts(collection:=values, amount:=2, fillEmpty:=True)

        Me.ListBox1.Items.AddRange(splits(0).Cast(Of Object).ToArray)
        Me.ListBox2.Items.AddRange(splits(1).Cast(Of Object).ToArray)
        Me.ListBox3.Items.AddRange(splits(2).Cast(Of Object).ToArray)
        Me.ListBox4.Items.AddRange(splits(3).Cast(Of Object).ToArray)
        Me.ListBox5.Items.AddRange(splits(4).Cast(Of Object).ToArray)

        Dim concatCol As IEnumerable(Of Integer) = splits(0).Concat(splits(3).Concat(splits(4).Concat(splits(5).Concat(splits(15)))))
        Dim distinctCol As IEnumerable(Of Integer) = concatCol.Distinct.Skip(2), Take(10)
        Dim selectCol As IEnumerable(Of Integer) = distinctCol.Select(Function(value As Integer)
                                                                          If value < MAX Then
                                                                              Return value
                                                                          Else
                                                                              Return Rand.Next(1, MAX)

                                                                          End If

                                                                      End Function)


        ListBox8.Items.AddRange(selectCol.Cast(Of Object).ToArray)


    End Sub


    Public Shared Function SplitIntoParts(Of T)(ByVal collection As IEnumerable(Of T),
                                                ByVal amount As Integer,
                                                ByVal fillEmpty As Boolean) As IEnumerable(Of IEnumerable(Of T))

        Return From index As Integer In Enumerable.Range(0, CInt(Math.Ceiling(collection.Count() / amount)))
               Select If(Not fillEmpty,
                         collection.Skip(index * amount).Take(amount),
                         If((collection.Count() - (index * amount)) >= amount,
                            collection.Skip(index * amount).Take(amount),
                            collection.Skip(index * amount).Take(amount).
                                                            Concat(From i As Integer
                                                                   In Enumerable.Range(0, amount - (collection.Count() - (index * amount)))
                                                                   Select DirectCast(Nothing, T))))
    End Function





   


End Class
   

#192
Cita de: Eleкtro en 31 Marzo 2015, 17:05 PM
¿por "registros" quieres decir "valor"?, es decir, ¿que si la variable "values1" o "values2" es mayor de '35', se asigne el mismo valor a la variable "compuesto"?

Código (vbnet) [Seleccionar]
if values1 > 35 then
 compuesto = values1

elseif values2 > 35 then
 compuesto = values2

else
 compuesto = 0

end if


¿?



Algunas fallitas jejej pero es mas o menos la idea

!) el operador '>' no está definido para los tipos 'System.Collections.Generic.IEnumerable(Of Integer)' y 'Integer'.
2) un valor de tipo 'Integer' no se puede convertir en 'System.Collections.Generic.IEnumerable(Of Integer)'.

luis
#193
Cita de: Eleкtro en 31 Marzo 2015, 16:15 PM
No entiendo exactamente a donde quieres llegar... ¿cual es el problema o duda que tienes con el código que has mostrado?.
En el código que has mostrado solo hay un arreglo/array y 3 variables enteras  :-\

Siempre estoy con prisas jejej y me enredo yo mismo,

Dim values1 As  integer (trae de la funcion, x numeros )
Dim values2 As  integer ( trae de la misma funcion otros x numeros)
Dim compuesto as integer ( a esta pasarle los valores de alguna de ellas )


lo que nesecito es pasar a  " Dim compuesto "  el valor de cualquiera de estas dos variables " Dim values1"   " Dim values2"  cuando alguna de ellas  sobrepasen los 35 registros ,si values1 tiene mas de 35 regitros se pasa a  "compuesto" y la otra se queda sin hacer nada y por supuesto al reves .


Luis

#194
Hola a todos aca traigo otra e las mias

tengo tres variables dos con arreglos y una tercera que trabajaria con los registros de la variable que cumpla con la condicion en ese momento pero no se si se puede hacer algo con esta chapuza que haciendo  :)


Código (vbnet) [Seleccionar]
   Dim values1 As    integer  
       Dim values2 As   integer
      [color=red] Dim compuesto As Integer <-- a esta variable llegaria los datos de cualquiera de las dos anteriores[/color]




       Dim Re As IEnumerable(Of Integer) =
          (values).
          Distinct.
          Select(Function(values As Integer)
                     If values <= 35 Then

                         Return values
                     Else

                         Return values2

                     End If

                 End Function)



Luis
#195
Estudiando el caso este descubri que la forma de que no me de error es mantener el arreglo dentro del minimo de registros que es de 35 registros por debajo de esa cantdad me produce el error, ahora lo que no tengo ni idea como hacerlo,se me ocurre con generar numeros aleaorios dentro el rango pero que no repitan con los de la variable  ;(

luis
#196
A ver segun los calculos que me hace el programa sabes, me entrega cierta cantidad de numeros que varian desde ( 00 al 99 ) unas veces 50 o mas numeros otras 40 y ciertas ocasiones muchas menos y es aca cuando se produce el error, ya que como casi siempre estan por los 50 numeros no da problemas de este tipo ,solo cuando baja de esa cantidad y claro salta el error, ya que no hay numeros para llenar a  splits(13)  splits(15) pero mayormente no falla, lo que quiero es ver como suplir esos numeros que faltarian y dentro del rango ?


Luis
#197
Sigo teniendo problemas con esto pense que lo podria resolver yo pero na :(

he probado a cambiar las declaraciones del rango max de estas formas pero no me me va y cuando algo hizo solo relleno con ceros ???

la funcion que uso no calcula una cantidad fija de numeros y dependiendo de eso, a veces va bien pero creo cuando se queda corto de cantidad de numeros me sale este error en tiempo de ejecucion

El valor no puede ser nulo.
Nombre del parámetro: second





Código (vbnet) [Seleccionar]
ReadOnly MAX As Integer = 99  ( de cualquiera de las formas no hace nada )
Dim MAX As Integer = 99



Código (vbnet) [Seleccionar]
  Dim concatCol5 As IEnumerable(Of Integer) = splits(3).Concat(splits(13).Concat(splits(15)))
        Dim distinctCol5 As IEnumerable(Of Integer) = concatCol5.Distinct
        Dim selectCol5 As IEnumerable(Of Integer) = distinctCol5.Select(Function(value As Integer)
                                                                            If value < MAX Then
                                                                                Return value
                                                                            Else
                                                                                Return Rand.Next(1, MAX)
                                                                            End If

                                                                        End Function)



        ListBox9.Items.AddRange(selectCol5.Cast(Of Object).ToArray)




Luis
#198
Se que no te gusta oir esto, pero es que no tendrías ese tipo de problemas si ordenases y estructurases mejor tú código, es un completo lio lo que tienes ...y lo sabes.

Claro que si lo se, pero tengo una grave problema y es siempre la " P " prisa de ver cono funciona y siempre digo " despues lo ordeno "  y asi vamos  :(  tengo que tratar de ser mas ordenado y valla tambien para los que estan aprendiendo a Programar es un sano consejo que nos da Elektro y se agradece :)

Luis
#199
Otra de las mias
cuando quiero unir dos rutinas o mas no me funciona lo de rellenar con numeros aleatorios dentro del rango

se supone que este codigo al no haber mas numeros dentro del arreglo tomaria uno al azar dentro del rango establecido pero no se que pasa ahora que no lo hace


Código (vbnet) [Seleccionar]
  ReadOnly MAX As Integer = 99


       Dim Rand As New Random
       Dim ReAsult2255e As IEnumerable(Of Integer) =
          (splits(1).Concat(splits(3).Concat(splits(5).
          Distinct.
          Select(Function(Value As Integer)
                     Return If(Value < MAX, Value, Rand.Next(1, MAX))
                 End Function))))

       Dim seAlecctedValues231 As IEnumerable(Of Integer) = ReAsult2255e
       Dim liste3 As List(Of Integer) = ReAsult2255e.Take(10).ToList
       liste3.Sort()
       ListBox12.Items.AddRange(liste3.Cast(Of Object).ToArray)
       ' ----------------------------------------------------------------------
     

      Dim Rand1 As New Random
       Dim AReAAsult2255e As IEnumerable(Of Integer) =
          (splits(3).Concat(splits(10).Concat(splits(11).Concat(splits(12).
          Distinct.
          Select(Function(Value As Integer)
                     Return If(Value < MAX, Value, Rand1.Next(1, MAX))
                 End Function)))))

       Dim seAlecctedValues231A As IEnumerable(Of Integer) = AReAAsult2255e
       Dim listeA3 As List(Of Integer) = AReAAsult2255e.Take(10).ToList

       listeA3.Sort()
       ListBox13.Items.AddRange(listeA3.Cast(Of Object).ToArray)



Luis


#200
Cita de: Eleкtro en 26 Marzo 2015, 12:30 PM
Usando LINQ, una forma de hacerlo sería agrupar los valores por su último número y seleccionar el primer elemento de cada grupo para descartar los demás valores que acaben con el mismo número:

Código (vbnet) [Seleccionar]
       Dim values As IEnumerable(Of Integer) =
                  {
                      1, 3, 4, 6, 7, 8, 9, 20, 22, 28, 35
                  }

       Dim selectedValues As IEnumerable(Of Integer) =
           From value As Integer In values
           Group By CStr(value).Last Into Group
           Select Group.First
           Take 10

       Me.ListBox1.Items.AddRange(selectedValues.Cast(Of Object).ToArray)


Output:
1, 3, 4, 6, 7, 8, 9, 20, 22, 35

Saludos


Perfecto :)


Gracias elektro


Luis