elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Mas problemas :( filtrar o eliminar registros iguales
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Mas problemas :( filtrar o eliminar registros iguales  (Leído 8,645 veces)
Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: Mas problemas :( filtrar o eliminar registros iguales
« Respuesta #20 en: 25 Marzo 2016, 20:04 pm »

Chacho has repetido números:
{2, 6, 10, 11, 17, 20, 24, 34, 38, 39, 40, 41, 41, 42, 43, 44, 45, 46, 47, 50}

Quita ese número repetido (41)y verás que te salen 969 XD

Código
  1.        Dim Elementos As IEnumerable(Of Integer) = {2, 6, 10, 11, 17, 20, 24, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50}
  2.        Dim EleX As Integer = 0
  3.        Dim EleX2 As Integer = 0
  4.        ListBox1.Items.Clear() 'Limpia el ListBox
  5.        For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1
  6.            For I2 As Integer = EleX To Elementos.Count - 1
  7.                For I3 As Integer = EleX To Elementos.Count - 1
  8.                    If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then
  9.                        ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3)))
  10.                    End If
  11.  
  12.                Next
  13.            Next
  14.        Next
  15.        MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)



      19!     
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ = 969
 3!·(19 - 3)!



« Última modificación: 25 Marzo 2016, 20:06 pm por Lekim » En línea

luis456


Desconectado Desconectado

Mensajes: 543



Ver Perfil
Re: Mas problemas :( filtrar o eliminar registros iguales
« Respuesta #21 en: 25 Marzo 2016, 20:08 pm »

Chacho has repetido números:
{2, 6, 10, 11, 17, 20, 24, 34, 38, 39, 40, 41, 41, 42, 43, 44, 45, 46, 47, 50}

Quita ese número repetido (41)y verás que te salen 969 XD

Código
  1.        Dim Elementos As IEnumerable(Of Integer) = {2, 6, 10, 11, 17, 20, 24, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50}
  2.        Dim EleX As Integer = 0
  3.        Dim EleX2 As Integer = 0
  4.        ListBox1.Items.Clear() 'Limpia el ListBox
  5.        For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1
  6.            For I2 As Integer = EleX To Elementos.Count - 1
  7.                For I3 As Integer = EleX To Elementos.Count - 1
  8.                    If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then
  9.                        ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3)))
  10.                    End If
  11.  
  12.                Next
  13.            Next
  14.        Next
  15.        MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)



      19!     
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ = 969
 3!·(19 - 3)!



Ya sabes las prisas jejjejeje pero si resta no ? y deja solo únicos, ya no veo de tanto estar pegado al monitor :(

luis


En línea

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

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: Mas problemas :( filtrar o eliminar registros iguales
« Respuesta #22 en: 25 Marzo 2016, 20:19 pm »

Creo que lo tengo como querias.... jeje

espero te sirva "Al estilo Elektro" ajaja que lujo  :xD:


Código
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.  
  5.        Dim intCol As IEnumerable(Of Integer) = {20, 24, 34, 44, 45}
  6.        Dim pairsCol As IEnumerable(Of String) =
  7.            From value1 As Integer In intCol
  8.            From value2 As Integer In intCol
  9.            Select String.Join(Environment.NewLine, (
  10.                               From value3 As Integer In intCol
  11.                               Where (value1 <> value2) AndAlso
  12.                                     (value1 <> value3) AndAlso
  13.                                     (value2 <> value3) AndAlso
  14.                                     (value3 > value2) AndAlso
  15.                                     (value2 > value1)
  16.                               Select String.Format("{0:00}, {1:00}, {2:00}",
  17.                                                    value1, value2, value3)))
  18.  
  19.  
  20.        Dim ClearRep As New List(Of String)
  21.  
  22.        For Each pairs As String In pairsCol
  23.            For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
  24.                ListBox1.Items.Add(line)
  25.            Next line
  26.        Next pairs
  27.  
  28.        MessageBox.Show(ListBox1.Items.Count)
  29.  
  30.  
  31.  
  32.    End Sub
  33. End Class




Código
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.  
  5.        Dim intCol As IEnumerable(Of Integer) = {2, 6, 10, 11, 17, 20, 24, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50}
  6.        Dim pairsCol As IEnumerable(Of String) =
  7.            From value1 As Integer In intCol
  8.            From value2 As Integer In intCol
  9.            Select String.Join(Environment.NewLine, (
  10.                               From value3 As Integer In intCol
  11.                               Where (value1 <> value2) AndAlso
  12.                                     (value1 <> value3) AndAlso
  13.                                     (value2 <> value3) AndAlso
  14.                                     (value3 > value2) AndAlso
  15.                                     (value2 > value1)
  16.                               Select String.Format("{0:00}, {1:00}, {2:00}",
  17.                                                    value1, value2, value3)))
  18.  
  19.  
  20.        Dim ClearRep As New List(Of String)
  21.  
  22.        For Each pairs As String In pairsCol
  23.            For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
  24.                ListBox1.Items.Add(line)
  25.            Next line
  26.        Next pairs
  27.  
  28.        MessageBox.Show(ListBox1.Items.Count)
  29.  
  30.  
  31.  
  32.    End Sub
  33. End Class



Hace lo mismo que el mio, pero como insistias tanto en este sistema lo he machacado un poco hasta que di  con el problemas, pero vamos que hace lo mismo.
« Última modificación: 25 Marzo 2016, 20:28 pm por Lekim » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.708



Ver Perfil
Re: Mas problemas :( filtrar o eliminar registros iguales
« Respuesta #23 en: 25 Marzo 2016, 21:11 pm »

El mal llamado "Estilo Elektro" se denomina LINQ-to-Objects, es algo más expensivo que un FOR, pero más legible y manejable que un FOR.

Si le ofrezco soluciones basadas en LINQ, es por que supuestamente Luis en su día se puso a practicar con los 101 ejemplos de LINQ oficiales de la galería de código de Microsoft, por lo que está más acostumbrado a este estilo de sintaxis, lo cual, en mi opinión, le resultará de mucha utilidad, puesto que, lo bueno de LINQ, es su versatilidad con esa cantidad de útiles keywords disponibles para realizar típicas operaciones que nos tomarían más tiempo de escritura al traducirlas a un búcle For Range o For Each.

Saludos.
« Última modificación: 25 Marzo 2016, 21:13 pm por Eleкtro » En línea


Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: Mas problemas :( filtrar o eliminar registros iguales
« Respuesta #24 en: 26 Marzo 2016, 08:46 am »

El mal llamado "Estilo Elektro" se denomina LINQ-to-Objects, es algo más expensivo que un FOR, pero más legible y manejable que un FOR.

Si le ofrezco soluciones basadas en LINQ, es por que supuestamente Luis en su día se puso a practicar con los 101 ejemplos de LINQ oficiales de la galería de código de Microsoft, por lo que está más acostumbrado a este estilo de sintaxis, lo cual, en mi opinión, le resultará de mucha utilidad, puesto que, lo bueno de LINQ, es su versatilidad con esa cantidad de útiles keywords disponibles para realizar típicas operaciones que nos tomarían más tiempo de escritura al traducirlas a un búcle For Range o For Each.

Saludos.

Hola Elektro

No te lo tomes a ma, jeje.  Desconocía completamente que se pudiera hacer usando LINQ-to-Objects, es mas desconocía LINQ-to-Objects. Con eso te lo digo todo.

Pero... este sistema va como sobre raíles, es decir, genera todas las combianciones de forma sistemática. ¿Qué pasa si yo solo quiero un grupo al azar de todas las combinaciones posibles que te haría LINQ-to-Objects? .

Claro podrías pensar, genero todas, y luego cojo algunas al azar. Eso vale si son pocas pero ¿Y si son unas 14 millones como en el código que he hecho yo de la Primitiva y solo quiero X < 14 millones al azar? No se si se podría usar en dicho caso LINQ-to-Objects.

Al descubrir "el estilo Elektro" XD, he estado contemplando la posibilidad de usar LINQ-to-Objects, pero no se me ocurre como.

Si ves mi código unos comentarios más atrás, verás que se pueden modificar varios valores como NumCombinaciones y " For Index As Integer = 1 To 6"  o        
Código:
Dim MisBolas() As String = {2, 6, 10, 11, 17, 20, 24, 34, 38, 39, 40}

Y no tengo que modificar código, ni condiciones para cambiar las combinaciones. Por ejemplo esto generaría combinaciones de la Primitiva pero solo con los números  {2, 6, 10, 11, 17, 20, 24, 34, 38, 39, 40}. Se podrían hacer un total de 462 combianciones. Pero el código sólo genera al azar  100. Que es lo que he establecido en  

Código:
  Dim NumCombinaciones As Integer = 100
(se puede cambiar 100 por 462 y las hace también..)

Código
  1. Public Class Form1
  2.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  3.        Dim ListaComb As New List(Of String)         '//Lista de combinaciones
  4.        Dim NumCombinaciones As Integer = 100 '<---OJO EN ESTE CASO SOLO LO MAXÍMO SON 462
  5.        Dim NewComb As String
  6.        ListaComb.Clear()
  7.  
  8.        For B1 As Integer = 1 To NumCombinaciones
  9.            While ListaComb.Count < NumCombinaciones
  10.                NewComb = GetCombPrimitiva()
  11.                ListaComb.Add(NewComb)
  12.                ListaComb = ListaComb.Distinct.ToList
  13.                Me.Text = "Combinaciones generadas: " & ListaComb.Count
  14.                My.Application.DoEvents()
  15.            End While
  16.  
  17.        Next B1
  18.        ListaComb.Sort()
  19.        ListBox1.Items.Clear()
  20.        For Each Elem As String In ListaComb
  21.            ListBox1.Items.Add(Elem)
  22.        Next
  23.  
  24.    End Sub
  25.    Public Function GetCombPrimitiva() As String
  26.        Dim MisBolas() As String = {2, 6, 10, 11, 17, 20, 24, 34, 38, 39, 40}
  27.        Dim Bombo As New List(Of Integer)           '//Bombo para meter las bolas
  28.        Dim Fila As New List(Of Integer)            '//Fila virtual para poner las bolas en orden
  29.        Dim Combinación As String = Nothing
  30.        Dim NumRandom As New Random
  31.        '//Llena el bombo
  32.        For Index As Integer = 0 To MisBolas.Count - 1
  33.            Bombo.Add(MisBolas(Index))
  34.        Next
  35.  
  36.        '//Extrae las bolas
  37.        For Index As Integer = 1 To 6
  38.            '//Devuelve números del 0 a 48 (49 números, Bola(0): contiene 1, Bola(1): Bolcontiene 2 ...)
  39.            Dim Bola As Integer = NumRandom.Next(0, Bombo.Count)
  40.            '//Mete la bola en la "fila"
  41.            Fila.Add(Bombo(Bola))
  42.            '//Quita la bola obtenida del bombo
  43.            Bombo.RemoveAt(Bola)
  44.        Next
  45.        Fila.Sort() 'Ordena la fila de bolas
  46.        For Each Bola As Integer In Fila
  47.            Combinación += String.Format("{0:00} ", Bola)
  48.        Next
  49.        Return Combinación
  50.    End Function
  51.  
  52.  
  53. End Class
  54.  

Pero,  este código tiene un inconveniente. A medida que añade combinaciones a la lista tiene que comprobar que no ha salido antes, y en cuanto el número de combinaciones en la lísta más se acerque al máximo ( en este caso serían 462) más tarda en añadir una nueva combinación a la lista. Porque claro, el código no está pensado para hacer todas, sino una porción del total.

¿Cómo se podría hacer con LINQ-to-Objects? Sin tener que estar modificando las condiciones. Si añado un número más o menos, o dos más, etc. Hay que estar modificando el código. Además que no quiero todos, sino todos o una parte del total al azar. No se me ocurre como se podría aprovechar la ventaja de LINQ-to-Objects. ¿Alguna idea?


S2s
« Última modificación: 26 Marzo 2016, 08:54 am por Lekim » En línea

luis456


Desconectado Desconectado

Mensajes: 543



Ver Perfil
Re: Mas problemas :( filtrar o eliminar registros iguales
« Respuesta #25 en: 26 Marzo 2016, 09:59 am »

El mal llamado "Estilo Elektro" se denomina LINQ-to-Objects, es algo más expensivo que un FOR, pero más legible y manejable que un FOR.

Si le ofrezco soluciones basadas en LINQ, es por que supuestamente Luis en su día se puso a practicar con los 101 ejemplos de LINQ oficiales de la galería de código de Microsoft, por lo que está más acostumbrado a este estilo de sintaxis, lo cual, en mi opinión, le resultará de mucha utilidad, puesto que, lo bueno de LINQ, es su versatilidad con esa cantidad de útiles keywords disponibles para realizar típicas operaciones que nos tomarían más tiempo de escritura al traducirlas a un búcle For Range o For Each.

Saludos.


El estilo Elektro jejej, bueno es el que mas cómodo se me hace ya que es cierto lo que dice el yo me acostumbre a linq y se me hace ahora un poco difícil mirar otros metodos
pero ambas son buenas ya que las de lekim son similares a Fox y tampoco es tan difícil
les agradezco a los dos por la ayuda, pero les recuerdo que cada programador lo hace a su manera generalmente pero lo mejor es compartir de todo esto  ;-)

Luis





En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Eliminar valores(option) iguales entre combobox
Desarrollo Web
CWeeD 1 3,141 Último mensaje 11 Febrero 2011, 02:14 am
por Nakp
Eliminar registros repetidos dejando 1
Bases de Datos
Shell Root 2 2,004 Último mensaje 20 Septiembre 2013, 05:11 am
por Shell Root
eliminar registros con ceros
.NET (C#, VB.NET, ASP)
luis456 5 2,154 Último mensaje 12 Noviembre 2014, 12:35 pm
por luis456
Eliminar filtrar numeros con terminaciones iguales
.NET (C#, VB.NET, ASP)
luis456 2 1,511 Último mensaje 26 Marzo 2015, 18:55 pm
por luis456
Eliminar registros iguales condicionados :(
.NET (C#, VB.NET, ASP)
luis456 4 605 Último mensaje 23 Marzo 2020, 15:49 pm
por luis456
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines