Autor
|
Tema: Mas problemas :( filtrar o eliminar registros iguales (Leído 12,281 veces)
|
Lekim
Desconectado
Mensajes: 268
|
Chacho, por correo privado ya te contesté. ¿Dónde ves tú que aquí se repitan? Dim Elementos As IEnumerable(Of Integer) = {1, 3, 4, 5, 6} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
01, 03, 04 01, 03, 05 01, 03, 06 01, 04, 05 01, 04, 06 01, 05, 06 03, 04, 05 03, 04, 06 03, 05, 06 04, 05, 06
Bueno, y está..el de 3 Lo que tengo una duda respecto a como quieres combinarlos, ya que hay muchas posibilidades. Te aconsejo, cuando preguntes aquí en el foro que especifiques bien las condiciones, más que nada para ahorrarte tener que volver a preguntar y trabajo y tiempo perdido para los demás.POSIBILIDADES DE COMBINAR DE TRES EN TRES: Combinarlos de modos que el segundo y el tercero de puedan repetir 1,2,2 1,2,31,2,4 Igual y que tercero pueda ser MENOR que el segundo. ... 1, 3, 21, 3, 3 1, 3, 4 Que el segundo y que el tercero no puedan ser iguales... 1, 3, 2 1, 3, 41, 3, 5 Que el segundo y el tercero no puedan ser iguales y el tercero no pueda ser menor que el segundo 1, 2 ,3 1, 2, 4 1, 3, 4 1, 3, 5 2, 3, 4 CÓDIGO: OPCIÓN 1: Permite el tercero menor que el segundo y que tercero y segundo sena iguales Dim Elementos As IEnumerable(Of Integer) = {1, 3, 4, 5, 8, 13, 34, 55, 84, 99} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX - 1 To Elementos.Count - 1 ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
OPCIÓN 2: No permite segundo y tercero sean iguales pero si que el tercero sea menor que el segundo. Dim Elementos As IEnumerable(Of Integer) = {1, 3, 4, 5, 8, 13, 34, 55, 84, 99} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX - 1 To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
OPCIÓN 3: No permite que el segundo y el tercero sean iguales, ni tampoco que el tercero sea menor que el segundo. Dim Elementos As IEnumerable(Of Integer) = {1, 3, 4, 5, 8, 13, 34, 55, 84, 99} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
Creo que no hay errores Si eso me lo cuentas S2s
Se llaman Combinaciones SIN REPETICIÓN y en combinatoria se puede simbolizar así: y la fórmula para determinar el número de combinaciones: m! C m,n = ___________ n! · ( m-n)!donde m! es el factorial del número total de elementos y n un número de elementos de cada grupo Consiste por ejemplo en realizar con un determinado grupo de elementos E={A,B,C,D,E} grupos de 3 en 3 y sin repetición. Si hay ABC, no vale BCA, ni tampoco AAA o ABB. Si m=[A,B,C,D,E] = 5 elementos n= grupos de 3 en 3 5! C 5,3 = ___________ = 10 combinaciones 3! · ( 5-3)! Dim Elementos As IEnumerable(Of Integer) = {1, 2, 3, 4, 5} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
Como ves salen 10
En la primitiva te saldrían ni más ni menos que...... 49!/(6!·(49 - 6)!)= 13.983.816Ya que en la primitiva da igual 14, 5 ,25 que 5, 14 ,25. Las bolas salen en un orden pero luego se ordenan, y no pueden volver a salir repetidas porque todas están en el mismo bombo. Como ya te dije son casi 14 millones de combinaciones...
|
|
« Última modificación: 25 Marzo 2016, 16:33 pm por Lekim »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 548
|
Jjejeje no se cuando aprendí hablar chino 我不明白的貓 A ver lekim estoy usando este código, los tuyos los tengo reservados a otros proyecto que se me ocurren por cierto me parecen estupendos ,pero estoy usando el código de Elektro este código me entrega los números a si. y supongamos que voy a jugar a la lotería .como dices son no se cuantos millones de apuestas pero te equivocas en la primitiva ahora son mas millones ya ahora es 6+complementario eso te multiplica la ostia Para que necesito hacer apuestas donde los números se repiten ? estaríamos formando realmente apuestas iguales si ordenamos los números de cada linea de menor a mayor.veremos que se repiten muchos registros por ende. es lo que quiero eliminar todos los que tienen asterisco ya que son combinaciones iguales pero en diferente orden asi es como me entrega AHORA este codigo los resultados 20, 24, 34*** 20, 24, 37 20, 34, 24*** 20, 34, 37 20, 37, 24 20, 37, 34**** 24, 20, 34 24, 20, 37 24, 34, 20 24, 34, 37 24, 37, 20 24, 37, 34 34, 20, 24 34, 20, 37 34, 24, 20*** 34, 24, 37 34, 37, 20 34, 37, 24 37, 20, 24**** 37, 20, 34 37, 24, 20 37, 24, 34 37, 34, 20 37, 34, 24 Simplemente quiero dejar números, registros o lineas únicas Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intCol As IEnumerable(Of Integer) = {20, 24, 34, 44, 45} Dim pairsCol As IEnumerable(Of String) = From value1 As Integer In intCol From value2 As Integer In intCol Select String.Join(Environment.NewLine, ( From value3 As Integer In intCol Where (value1 <> value2) AndAlso (value1 <> value3) AndAlso (value2 <> value3) Select String.Format("{0:00}, {1:00}, {2:00}", value1, value2, value3))) For Each pairs As String In pairsCol For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries) ' MsgBox(pairs.Count) ' MsgBox(line1.Count) Me.ListBox1.Items.Add(line) Next line Next pairs
Luis
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Lekim
Desconectado
Mensajes: 268
|
Bueno esto es como la once que le han puesto lo de los números de serie, pero en lo básico es 100000 números, luego tienes + el número de serie y todas las jodidos 'TIMOJUEGOS' que se les ocurra. Realmente no me queda lo claro lo que quieres, . Pero mientras escribías hice este código a ver si te sirve. Crea los seis números de la Primitiva, sin repetir y en orden de numeración con la función GetCombPrimitiva . Además crea tantas combinaciones como quieras hacer y SIN REPETIR, establecido en NumCombinacionesSi hay algún fallo pues que alguien lo digo o lo arregle jaja GENERADOR DE COMBINACIONES DEL LA PRIMITIVAPublic Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ListaComb As New List(Of String) '//Lista de combinaciones Dim NumCombinaciones As Integer = 5 Dim NewComb As String ListaComb.Clear() For B1 As Integer = 1 To NumCombinaciones While ListaComb.Count < NumCombinaciones NewComb = GetCombPrimitiva() ListaComb.Add(NewComb) ListaComb = ListaComb.Distinct.ToList My.Application.DoEvents() End While Next B1 ListBox1.Items.Clear() For Each Elem As String In ListaComb ListBox1.Items.Add(Elem) Next End Sub Public Function GetCombPrimitiva() As String Dim Bombo As New List(Of Integer) '//Bombo para meter las bolas Dim Fila As New List(Of Integer) '//Fila virtual para poner las bolas en orden Dim Combinación As String = Nothing Dim NumRandom As New Random '//Llena el bombo For Bolas As Integer = 1 To 49 Bombo.Add(Bolas) Next '//Extrae las bolas For Index As Integer = 1 To 6 '//Devuelve números del 0 a 48 (49 números, Bola(0): contiene 1, Bola(1): Bolcontiene 2 ...) Dim Bola As Integer = NumRandom.Next(0, Bombo.Count) '//Mete la bola en la "fila" Fila.Add(Bombo(Bola)) '//Quita la bola obtenida del bombo Bombo.RemoveAt(Bola) Next Fila.Sort() 'Ordena la fila de bolas For Each Bola As Integer In Fila Combinación += String.Format("{0:00} ", Bola) Next Return Combinación End Function End Class
Por cierto que si Elektro no te lo ha resuelto ya es que no se puede Además que lo que pides ya lo he puesto yo, creo , pero tu te has empeñado en usar este código: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intCol As IEnumerable(Of Integer) = {20, 24, 34, 44, 45} Dim pairsCol As IEnumerable(Of String) = From value1 As Integer In intCol From value2 As Integer In intCol Select String.Join(Environment.NewLine, ( From value3 As Integer In intCol Where (value1 <> value2) AndAlso (value1 <> value3) AndAlso (value2 <> value3) Select String.Format("{0:00}, {1:00}, {2:00}", value1, value2, value3))) For Each pairs As String In pairsCol For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries) ' MsgBox(pairs.Count) ' MsgBox(line1.Count) Me.ListBox1.Items.Add(line) Next line Next pairs
y quieres quitar repeticiones... este código ya está hecho para crear las combinaciones así, tendrías que cambiar las condiciones o añadir más código para ir leyendo línea tras línea y comprando para ir eliminado, un rollo Sinceramente, no se como hacerlo usando ese código . Yo ta te lo hice. Parece que hablo chino yo jaja. Hasta he dado clases de combinatoria que más quieres XD
|
|
« Última modificación: 26 Marzo 2016, 08:17 am por Lekim »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 548
|
Joder estas empeñado con lo imposible jejej Sinceramente, no se como hacerlo usando ese código . Yo ta te lo hice. Parece que hablo chino yo jaja. Hasta he dado clases de combinatoria que más quieres XDSi lo que nesecito no es modificar el codigo. es eliminar en el listbox los numeros o lineas repetidas ........como ufff se me seca la lengua jajajja no me interesa modificar el codigo voy corriendo a probar este codigo de la primi a ver si tengo mas suerte que aca JAJAJJA gracias por tu paciencia Luis
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Lekim
Desconectado
Mensajes: 268
|
Si lo que nesecito no es modificar el codigo. es eliminar en el listbox los numeros o lineas repetidas ........como ufff se me seca la lengua jajajja no me interesa modificar el codigo gracias por tu paciencia Luis ahí está compi, para hacer eso cambias el código o usas el que ya te di uno usando For Next o añades más còdigo para quitar las repeticones lo cual es un royo. Por eso te digo que si yo ya he puesto un código que hace esto mismo porque te empeñas en usar este XD
|
|
« Última modificación: 25 Marzo 2016, 18:31 pm por Lekim »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 548
|
ahí está compi, para hacer eso cambias el código o usas el que ya te di uno usando For Next o añades más còdigo para quitar las repeticones lo cual es un royo. Por eso te digo que si yo ya he puesto un código que hace esto mismo porque te empeñas en usar este XD
Ya puse tu codigo de la primitiva a rular a ver si ganamos jejejje ,bueno en serio ,olvidate del codigo, solo imagina que tenemos el listbox y hay que eliminar como comento tan dificil es ??? Luis
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Lekim
Desconectado
Mensajes: 268
|
Amos a ver ¿Y esto que es lo que hace? Dim Elementos As IEnumerable(Of Integer) = {20, 24, 34, 44, 45} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
20, 24, 34 20, 24, 44 20, 24, 45 20, 34, 44 20, 34, 45 20, 44, 45 24, 34, 44 24, 34, 45 24, 44, 45 34, 44, 45 madre miaaaa!!!!! El de la primitiva tenía un fallo, no salía el 49, ya lo he arreglado
El de la primitiva modificando un poco también hace LO MISMO Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ListaComb As New List(Of String) '//Lista de combinaciones Dim NumCombinaciones As Integer = 10 '<---OJO EN ESTE CASO SOLO LO MAXÍMO SON 10 Dim NewComb As String ListaComb.Clear() For B1 As Integer = 1 To NumCombinaciones While ListaComb.Count < NumCombinaciones NewComb = GetCombPrimitiva() ListaComb.Add(NewComb) ListaComb = ListaComb.Distinct.ToList My.Application.DoEvents() End While Next B1 ListaComb.Sort() ListBox1.Items.Clear() For Each Elem As String In ListaComb ListBox1.Items.Add(Elem) Next End Sub Public Function GetCombPrimitiva() As String Dim MisBolas() As String = {20, 24, 34, 44, 45} Dim Bombo As New List(Of Integer) '//Bombo para meter las bolas Dim Fila As New List(Of Integer) '//Fila virtual para poner las bolas en orden Dim Combinación As String = Nothing Dim NumRandom As New Random '//Llena el bombo For Index As Integer = 0 To MisBolas.Count - 1 Bombo.Add(MisBolas(Index)) Next '//Extrae las bolas For Index As Integer = 1 To 3 '//Devuelve números del 0 a 48 (49 números, Bola(0): contiene 1, Bola(1): Bolcontiene 2 ...) Dim Bola As Integer = NumRandom.Next(0, Bombo.Count) '//Mete la bola en la "fila" Fila.Add(Bombo(Bola)) '//Quita la bola obtenida del bombo Bombo.RemoveAt(Bola) Next Fila.Sort() 'Ordena la fila de bolas For Each Bola As Integer In Fila Combinación += String.Format("{0:00} ", Bola) Next Return Combinación End Function End Class
Pero OJO con el valor que pones a NumCombinaciones , pues lo máximo que debes poner es el máximo que permite las condiciones que en este caso son : C5,3= 5!/(3!·(5-3)!) = 10 combinaciones
|
|
« Última modificación: 26 Marzo 2016, 08:20 am por Lekim »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 548
|
Amos a ver ¿Y esto que es lo que hace? Dim Elementos As IEnumerable(Of Integer) = {20, 24, 34, 44, 45} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count)
20, 24, 34 20, 24, 44 20, 24, 45 20, 34, 44 20, 34, 45 20, 44, 45 24, 34, 44 24, 34, 45 24, 44, 45 34, 44, 45 madre miaaaa!!!!! A ver jejej en que parte empiezo hablar chino jajja no en serio ,se que te pica la curiosidad para ordenarlos lo puedo hacer a mano ademas tengo que mirar si este codigo hace exactamente que lo de elektro y por favor no te ofendas jejje no es que sea mejor o peor, es que tengo metida entre ceja y ceja una idea y yo soy muy "TERCO · lo Reconozco .solo quiero trabajar con el listbox despues que este cargado con el otro codigo, pero ahora mismo voy a compararlos ya te dire que hace jejejje solo mira bien y tienes que darte cuenta que es lo que hace y ya te lo dire pero con pruebas Luis
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Lekim
Desconectado
Mensajes: 268
|
joer El código de elektro te hace esto; 20, 24, 34 20, 24, 44 20, 24, 45 20, 34, 24 20, 34, 44 20, 34, 45 20, 44, 24 20, 44, 34 20, 44, 45 20, 45, 24 20, 45, 34 20, 45, 44 24, 20, 34 24, 20, 44 24, 20, 45 24, 34, 20 24, 34, 44 24, 34, 45 24, 44, 20 24, 44, 34 24, 44, 45 24, 45, 20 24, 45, 34 24, 45, 44 34, 20, 24 34, 20, 44 34, 20, 45 34, 24, 20 34, 24, 44 34, 24, 45 34, 44, 20 34, 44, 24 34, 44, 45 34, 45, 20 34, 45, 24 34, 45, 44 44, 20, 24 44, 20, 34 44, 20, 45 44, 24, 20 44, 24, 34 44, 24, 45 44, 34, 20 44, 34, 24 44, 34, 45 44, 45, 20 44, 45, 24 44, 45, 34 45, 20, 24 45, 20, 34 45, 20, 44 45, 24, 20 45, 24, 34 45, 24, 44 45, 34, 20 45, 34, 24 45, 34, 44 45, 44, 20 45, 44, 24 45, 44, 34
y tu quieres quitar repeticiones de modo que si pone ABC , ni otro ABC, ni ponga BCA o BAC, esto REPIIIIITOOOOOO son COMBINACIONES SIN REPETICION y al final te queda esto: 20, 24, 34 20, 24, 44 20, 24, 45 20, 34, 44 20, 34, 45 20, 44, 45 24, 34, 44 24, 34, 45 24, 44, 45 34, 44, 45
Que es lo que hace mi código ¿Cual es el problema? Quien entienda que te compre ajajja.
|
|
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 548
|
Hola cara de japones jejej es broma yo me tomo todo en broma ya con mi edad no se puede andar enfadado, mira como lo llevo ponlo a rular y dime que tal va Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Elementos As IEnumerable(Of Integer) = {2, 6, 10, 11, 17, 20, 24, 34, 38, 39, 40, 41, 41, 42, 43, 44, 45, 46, 47, 50} Dim EleX As Integer = 0 Dim EleX2 As Integer = 0 ListBox1.Items.Clear() 'Limpia el ListBox For I1 As Integer = 0 To Elementos.Count - 1 : EleX += 1 For I2 As Integer = EleX To Elementos.Count - 1 For I3 As Integer = EleX To Elementos.Count - 1 If Elementos(I2) <> Elementos(I3) And Elementos(I3) > Elementos(I2) Then ListBox1.Items.Add(String.Format("{0:00}, {1:00}, {2:00}", Elementos(I1), Elementos(I2), Elementos(I3))) End If Next Next Next MessageBox.Show("Combinaciones: " & ListBox1.Items.Count) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim list As New List(Of String) Dim i As Integer For i = 0 To ListBox1.Items.Count - 1 list.Add(ListBox1.Items(i)) Next i ListBox1.Items.Clear() For Each s As String In list.Distinct ListBox1.Items.Add(s) Next End Sub
y si resta o no resta después de aplicar el filtro habra que poner un count despues de aplicar el filtro espero Luis
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Eliminar valores(option) iguales entre combobox
Desarrollo Web
|
CWeeD
|
1
|
3,888
|
11 Febrero 2011, 02:14 am
por Nakp
|
|
|
Eliminar registros repetidos dejando 1
Bases de Datos
|
Shell Root
|
2
|
3,288
|
20 Septiembre 2013, 05:11 am
por Shell Root
|
|
|
eliminar registros con ceros
.NET (C#, VB.NET, ASP)
|
luis456
|
5
|
3,419
|
12 Noviembre 2014, 12:35 pm
por luis456
|
|
|
Eliminar filtrar numeros con terminaciones iguales
.NET (C#, VB.NET, ASP)
|
luis456
|
2
|
2,348
|
26 Marzo 2015, 18:55 pm
por luis456
|
|
|
Eliminar registros iguales condicionados :(
.NET (C#, VB.NET, ASP)
|
luis456
|
4
|
2,184
|
23 Marzo 2020, 15:49 pm
por luis456
|
|