Autor
|
Tema: Mas problemas :( filtrar o eliminar registros iguales (Leído 12,312 veces)
|
Lekim
Desconectado
Mensajes: 268
|
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 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} 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)
19! ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ = 969 3!·(19 - 3)!
|
|
« Última modificación: 25 Marzo 2016, 20:06 pm por Lekim »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 548
|
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 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} 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)
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
Mensajes: 268
|
Creo que lo tengo como querias.... jeje espero te sirva "Al estilo Elektro" ajaja que lujo : Public Class Form1 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) AndAlso (value3 > value2) AndAlso (value2 > value1) Select String.Format("{0:00}, {1:00}, {2:00}", value1, value2, value3))) Dim ClearRep As New List(Of String) For Each pairs As String In pairsCol For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries) ListBox1.Items.Add(line) Next line Next pairs MessageBox.Show(ListBox1.Items.Count) End Sub End Class
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 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} 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) AndAlso (value3 > value2) AndAlso (value2 > value1) Select String.Format("{0:00}, {1:00}, {2:00}", value1, value2, value3))) Dim ClearRep As New List(Of String) For Each pairs As String In pairsCol For Each line As String In pairs.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries) ListBox1.Items.Add(line) Next line Next pairs MessageBox.Show(ListBox1.Items.Count) End Sub 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
Mensajes: 9.818
|
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
Mensajes: 268
|
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 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 Dim NumCombinaciones As Integer = 100 (se puede cambiar 100 por 462 y las hace también..) 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 = 100 '<---OJO EN ESTE CASO SOLO LO MAXÍMO SON 462 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 Me.Text = "Combinaciones generadas: " & ListaComb.Count 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 = {2, 6, 10, 11, 17, 20, 24, 34, 38, 39, 40} 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 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
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
Mensajes: 548
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Eliminar valores(option) iguales entre combobox
Desarrollo Web
|
CWeeD
|
1
|
3,894
|
11 Febrero 2011, 02:14 am
por Nakp
|
|
|
Eliminar registros repetidos dejando 1
Bases de Datos
|
Shell Root
|
2
|
3,299
|
20 Septiembre 2013, 05:11 am
por Shell Root
|
|
|
eliminar registros con ceros
.NET (C#, VB.NET, ASP)
|
luis456
|
5
|
3,429
|
12 Noviembre 2014, 12:35 pm
por luis456
|
|
|
Eliminar filtrar numeros con terminaciones iguales
.NET (C#, VB.NET, ASP)
|
luis456
|
2
|
2,354
|
26 Marzo 2015, 18:55 pm
por luis456
|
|
|
Eliminar registros iguales condicionados :(
.NET (C#, VB.NET, ASP)
|
luis456
|
4
|
2,191
|
23 Marzo 2020, 15:49 pm
por luis456
|
|