formar combinaciones de 7 y 8 numeros con 25 numeros

Iniciado por luis456, 11 Octubre 2014, 11:54 AM

0 Miembros y 11 Visitantes están viendo este tema.

luis456

Cita de: Eleкtro en 22 Octubre 2014, 18:53 PM
Te explicaré la query de LINQ del primer ejemplo:

1) Creo grupos de los números según su primer dígito (habiendo añadido temporalmente un "0" a los números del 1 al 9), es decir, grupo de números que empiezan por 0, o por 1, 2, 3, etc.
   Cada grupo contiene todos los números de la colección que empiecen por ese primer dígito de la regla. por ejemplo el grupo del "0" contendrá { 02, 08, 09 } (el cero es imaginario)

2) Asigno los grupos a la variable/propiedad 'items'.

3) Instancio un objeto 'LuisLibrary.Group' por cada grupo, al que le asigno el primer número del grupo (items(0)) a la propiedad 'First', y el segundo número del grupo (items(1)) a la propiedad 'Second'.

4) Devuelvo una Lista de los objetos 'LuisLibrary.Group'.

Saludos



O sea que los tres van juntos en el mismo codigo ?

luis

Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#31
¿te refieres a los 3 ejemplos que dí?... no, son 3 ejemplos distintos para conseguir practicamente lo mismo, siendo el primer ejemplo el más elaborado.

saludos.








luis456

hola

estoy probando con este codigo y cuando lo ejecuto solo me muestra en el listbox

"coleccion"  ? hay que hacer mas cosas, la variabe que contiene los numeros

es " resultss" 


Código (vbnet) [Seleccionar]
  Dim groupedValues As List(Of List(Of Integer)) =
    (From i As Integer In Resultss
     Group By i.ToString("00").First Into items = Group
     Select New List(Of Integer) From {items(0), items(1)}
     ).ToList

        ListBox3.Items.AddRange(groupedValues.Cast(Of Object).ToArray)
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#33
Luis, estoy muy harto de verte cometer el mismo fallo en el mismo punto crítico después de habertelo explicado y resuelto decenas de veces ya :-/

¿Por qué no practicas un poco todo lo referente a colecciones genéricas y LINQ?.

Código (vbnet) [Seleccionar]
   ' Join Enumerables
   ' ( By Elektro )
   '
   ' Examples :
   '
   ' Dim listA As New List(Of String) From {"a", "b"}
   ' Dim listB As New List(Of String) From {"c", "d"}
   ' Dim newlist As List(Of String) = JoinEnumerables(Of String)({listA, listB}).ToList ' Result: {"a", "b", "c", "d"}

   ''' <summary>
   ''' Joins the specified <see cref="IEnumerable"/> colecctions into a single <see cref="IEnumerable"/>.
   ''' </summary>
   ''' <typeparam name="T"></typeparam>
   ''' <param name="enumerables">The <see cref="IEnumerable"/> collections to join.</param>
   ''' <returns>IEnumerable(Of T).</returns>
   Friend Function JoinEnumerables(Of T)(ByVal enumerables As IEnumerable(Of T)()) As IEnumerable(Of T)

       Return enumerables.SelectMany(Function(enumerable As IEnumerable(Of T)) enumerable)

   End Function


Código (vbnet) [Seleccionar]
       Dim joinedGroups As List(Of Integer) =
           JoinEnumerables(Of Integer)(
                          (From group As List(Of Integer) In groupedValues
                           Select group).ToArray
           ).ToList

       ListBox1.Items.Add(String.Join(", ", joinedGroups))


Espero que eso te ayude a entender un poco más, aunque se que por el momento no vas a entender el parámetro de Type (T), pero bueno xD.

Saludos








luis456

Cita de: Eleкtro en 23 Octubre 2014, 17:34 PM
Luis, estoy muy harto de verte cometer el mismo fallo en el mismo punto crítico después de habertelo explicado y resuelto decenas de veces ya :-/

¿Por qué no practicas un poco todo lo referente a colecciones genéricas y LINQ?.

Código (vbnet) [Seleccionar]
   ' Join Enumerables
   ' ( By Elektro )
   '
   ' Examples :
   '
   ' Dim listA As New List(Of String) From {"a", "b"}
   ' Dim listB As New List(Of String) From {"c", "d"}
   ' Dim newlist As List(Of String) = JoinEnumerables(Of String)({listA, listB}).ToList ' Result: {"a", "b", "c", "d"}

   ''' <summary>
   ''' Joins the specified <see cref="IEnumerable"/> colecctions into a single <see cref="IEnumerable"/>.
   ''' </summary>
   ''' <typeparam name="T"></typeparam>
   ''' <param name="enumerables">The <see cref="IEnumerable"/> collections to join.</param>
   ''' <returns>IEnumerable(Of T).</returns>
   Friend Function JoinEnumerables(Of T)(ByVal enumerables As IEnumerable(Of T)()) As IEnumerable(Of T)

       Return enumerables.SelectMany(Function(enumerable As IEnumerable(Of T)) enumerable)

   End Function


Código (vbnet) [Seleccionar]
       Dim joinedGroups As List(Of Integer) =
           JoinEnumerables(Of Integer)(
                          (From group As List(Of Integer) In groupedValues
                           Select group).ToArray
           ).ToList

       ListBox1.Items.Add(String.Join(", ", joinedGroups))


Espero que eso te ayude a entender un poco más, aunque se que por el momento no vas a entender el parámetro de Type (T), pero bueno xD.

Saludos


Como ya sabes voy a pasos, si me dices que hace cada cosa lo entendería mejor :) ya que tengo que ir a preguntar por todo jejej y lo que hago es enredarme mas

luis




Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

Cita de: luis456 en 23 Octubre 2014, 19:08 PM

Como ya sabes voy a pasos, si me dices que hace cada cosa lo entendería mejor :) ya que tengo que ir a preguntar por todo jejej y lo que hago es enredarme mas

luis

A ver Luis, en el código tu tienes una lista que contiene más listas ( List(Of List(Of Integer)) ), y estás intentando mostrar/añadir la lista que contiene más listas en el Listbox, por eso te muestra "colección" y no te muestra los números, porque le estás pasando una serie de colecciones genéricas... no le estás pasando diréctamente los números, debes pasarle un String o una colección de Strings al método Add o AddRange del ListBox, ahi es donde fallas siempre, jolín :P.

La función del código de arriba ( JoinEnumerables ) simplemente lo que hace es UNIR cada List(Of Integer) de la Lista principal, en una única lista, y con el método String.Join() UNO los items de la lista para devolver un String...

Slaudos.








luis456

me explicas este error ? cada dia hay algo jejeje ,estoy probando este codigo y me dice:

" El tipo 'LuisLibrary.Group' no está definido "

Código (vbnet) [Seleccionar]
Imports System.Text.RegularExpressions

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim values As New List(Of Integer) From
    {
        2, 8, 9, 10, 11, 15, 21, 22, 28, 50, 55, 58
    }

        Dim groupedValues As List(Of Group) =
            (From i As Integer In values
            Group By i.ToString("00").First
            Into items = Group Select New LuisLibrary.Group With {
                .First = items(0),
                .Second = items(1)
            }).ToList

        For Each g As LuisLibrary.Group In groupedValues

            Dim str As String = String.Format("{0:00}, {1:00}",
                                              g.First,
                                              g.Second)

            MessageBox.Show(str)

        Next g
    End Sub
End Class
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

Cita de: luis456 en 24 Octubre 2014, 14:25 PM" El tipo 'LuisLibrary.Group' no está definido "

Es demasiado obvio, no se puede encontrar ningún miembro que se llame 'Group' en el código, al no estar creado o no tener la visibilidad suficiente para poder acceder a él.

En el código que muestras falta la parte más importante, el NameSpace o Class 'LuisLibrary' y el miembro de Class 'Group', si no los creas entonces no existen...
no necesitas crearlos desde cero, en el primer ejemplo que te mostré ya lo hice yo, añádelo a tu código.

Saludos.








luis456

Me voy a suicidar :(


Un valor de tipo 'System.Collections.Generic.List(Of WindowsApplication1.LuisLibrary.Group)' no se puede convertir en 'System.Collections.Generic.List(Of System.Text.RegularExpressions.Group)'.

Un valor de tipo 'System.Text.RegularExpressions.Group' no se puede convertir en 'WindowsApplication1.LuisLibrary.Group'.




Código (vbnet) [Seleccionar]
Imports System.Text.RegularExpressions
Namespace LuisLibrary

    Friend NotInheritable Class Group

        Protected Friend Property First As Integer = 0I
        Protected Friend Property Second As Integer = 0I

    End Class

End Namespace
Public Class Form1
   
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim values As New List(Of Integer) From
    {
        2, 8, 9, 10, 11, 15, 21, 22, 28, 50, 55, 58
    }

        Dim groupedValues As List(Of Group) =
            (From i As Integer In values
            Group By i.ToString("00").First
            Into items = Group Select New LuisLibrary.Group With {
                .First = items(0),
                .Second = items(1)
            }).ToList

        For Each g As LuisLibrary.Group In groupedValues

            Dim str As String = String.Format("{0:00}, {1:00}",
                                              g.First,
                                              g.Second)

            MessageBox.Show(str)

        Next g
    End Sub
End Class


Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#39
Cita de: luis456 en 24 Octubre 2014, 14:59 PMUn valor de tipo 'System.Collections.Generic.List(Of WindowsApplication1.LuisLibrary.Group)' no se puede convertir en 'System.Collections.Generic.List(Of System.Text.RegularExpressions.Group)'.

Un valor de tipo 'System.Text.RegularExpressions.Group' no se puede convertir en 'WindowsApplication1.LuisLibrary.Group'.

Se debe a que el nombre 'Group' es ambiguo, 'Group' existe tanto en el NameSpace 'RegularExpressions' como en el Namespace 'LuisLibrary' así que se produce un conflicto en la manera en que lo intentas usar,
tu has importado directamente en el código el namespace 'RegularExpressions' así que al escribir 'Group' se toma como referencia lo que has importado... 'RegularExpressions.Group'.

¿Solución?, especifica el nombre del Namespace ( 'LuisLibrary.Group' ) en lugar de escribir solo 'Group', o modifica el nombre de la Class 'Group' por otro más apropiado como podría ser 'Int32Group' y luego importa el namespace 'LuisLibrary'.

Reemplaza:
Citar
Código (vbnet) [Seleccionar]
Dim groupedValues As List(Of Group) =...

Por:
Código (vbnet) [Seleccionar]
Dim groupedValues As List(Of LuisLibrary.Group) =...

EDITO:
1) Por cierto, no quiero ver marranadas, ya me estás separando 'Luislibrary' de la Class 'Form1', crea un archivo de Class individual en el projecto y ahí copias y pegas el namespace 'LuisLibrary' y vas añadiendo tus distintas "utilidades" para usarlas en el futuro.

2) En el código que muestras no necesitas usar expresiones regulares, al menos en el código que has mostrado, si no estás seguro de porque importaste 'RegularExpressions' entonces elimina ese Import.

Saludos.