Eliminar duplicados o repetidos

Iniciado por luis456, 27 Abril 2015, 15:08 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

#10
repito la pregunta:
CitarDices que en este ejemplo solo debe quedar una secuencia (o eso entiendo por "registro"), ¿cual?, y ¿por qué?.

No se si esto produce el resultado que esperas:
Código (vbnet) [Seleccionar]
Dim col1 As IEnumerable(Of Integer) = {1, 5, 6, 7, 8, 9, 10, 11}
Dim col2 As IEnumerable(Of Integer) = {1, 5, 6, 7, 8, 9, 10, 11}
Dim col3 As IEnumerable(Of Integer) = {1, 2, 8, 6, 9}
Dim col4 As IEnumerable(Of Integer) = {2, 2, 3}
Dim max As Integer = 10

Dim cols As IEnumerable(Of IEnumerable(Of String)) =
   From col As IEnumerable(Of Integer) In {col1, col2, col3, col4}
   Group By String.Join("", col).AsEnumerable
   Into Group
   Select From value As Integer In Group.First.Distinct
          Where Not (value > max)
          Select value.ToString(format:="0#")

ListBox1.Items.AddRange((From col As IEnumerable(Of String) In cols Select String.Join(", ", col)).ToArray)


Resultado de ejecución:
01, 05, 06, 07, 08, 09, 10
01, 02, 08, 06, 09
02, 03


Saludos








luis456

#11
Bueno si y no jejje

a si es ahora como entrega los resultados
01, 05, 06, 07, 08, 09, 10 ,20 ,80, 88
01, 02, 08, 06, 09 <-----eliminar ya que tiene que tener 10 numeros
02, 03<-------------------eliminar ya que tiene que tener 10 numeros


pero debe solo quedar asi , solo los registros completos que cumplan la condicion de 10 registros ( disculpas no habia contado bien jeje)

01, 05, 06, 07, 08, 09, 10,20,80,88

Código (vbnet) [Seleccionar]
Dim col1 As IEnumerable(Of Integer) = {1, 5, 6, 7, 8, 9, 10, 11, 15, 80}
       Dim col2 As IEnumerable(Of Integer) = {1, 5, 6, 7, 8, 9, 10, 11, 85}
       Dim col3 As IEnumerable(Of Integer) = {1, 2, 8, 6, 9}
       Dim col4 As IEnumerable(Of Integer) = {2, 2, 3}
       Dim MAX As Integer = 10


Gracias :)



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

Eleкtro

#12
Cita de: luis456 en  1 Mayo 2015, 07:01 AM01, 02, 08, 06, 09 <-----eliminar ya que tiene que tener 10 numeros
02, 03<-------------------eliminar ya que tiene que tener 10 numeros

Entendí que el "10", es decir esa variable "max" era con la intención de limitar los valores, no la cantidad de valores por secuencia.

Solo debes evaluar el valor de la función Enumerable.Count() usando la clausula WHERE en la misma query que te he mostrado.

Enumerable.Count() - MSDN
Cita de: MSDNReturns the number of elements in a sequence.

...y eliminar esto que yo escribí, claro está:
Citar
Código (vbnet,2) [Seleccionar]
...
Where Not (value > max)
...

Creo que eres capaz de corregirlo pero por si acaso te doy una pista, ese WHERE que he citado tienes que eliminarlo, no reemplazarlo, el WHERE que tu tienes que añadir debe ir en otro lugar.

Saludos








luis456

Hola con pistas tampoco doy porque he mirado le que hay en msd y no se como contar o mirar dentro de los col1 ,col2... que estan  a su ves en el grupo cols

ya que si hago esta (prueba) me cuenta es el total de col y no los que estan dentro de col1

Código (vbnet) [Seleccionar]
  ' eliminar registros iguales en  " Lnumbers " lo solucione quitandolos del listxbo
    ' eliminar registros MENORES a MAX
    ' En este codigo deberia quedar un solo registro de los cuatro

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim col1 As IEnumerable(Of Integer) = {1, 5, 6, 7, 8, 9, 10, 11, 15, 80}
        Dim col2 As IEnumerable(Of Integer) = {1, 5, 6, 7, 8, 9, 10, 11, 85}
        Dim col3 As IEnumerable(Of Integer) = {1, 2, 8, 6, 9}
        Dim col4 As IEnumerable(Of Integer) = {2, 2, 3}
        Dim MAX As Integer = 10


        Dim cols As IEnumerable(Of IEnumerable(Of String)) =
            From col As IEnumerable(Of Integer) In {col1, col2, col3, col4}
            Group By String.Join("", col).AsEnumerable
            Into Group
            Select From value As Integer In Group.First.Distinct
                    Where Not (value = MAX)
                   Select value.ToString(format:="0#")

        ListBox1.Items.AddRange((From col As IEnumerable(Of String) In cols Select String.Join(", ", col)).ToArray)
        '*****************************************preubas**********------------------------------------------------
        Dim cuenta As Integer = cols.Count()
        MsgBox(cols.Count) lleva cuatro bien
        MsgBox(col1.Count) lleva 10 numeros bien
        MsgBox(col2.Count) lleva 9 mal eliminar


luis


Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#14
Cita de: luis456 en  1 Mayo 2015, 16:35 PMcon pistas tampoco

Código (vbnet) [Seleccionar]

       Dim cuenta As Integer = cols.Count()
       MsgBox(cols.Count) lleva cuatro bien
       MsgBox(col1.Count) lleva 10 numeros bien
       MsgBox(col2.Count) lleva 9 mal eliminar


Eso no es lo que te expliqué que debes hacer, solo tienes que utilizar ese cols.Count() en la query de LINQ que te mostré y que ya te lo mencioné...

Cita de: luis456 en  1 Mayo 2015, 16:35 PMno se como contar o mirar dentro de los col1 ,col2... que estan  a su ves en el grupo cols
Con la claúsula WHERE.

Código (vbnet) [Seleccionar]
From col As IEnumerable(Of Integer) In {col1, col2, col3, col4}
Where (col.Count() <= Max)
Group By...
...


¿Ves cómo era muy facil?.

Saludos








luis456

 :rolleyes: :rolleyes: :rolleyes: es que la duda que tenia era con la logica  ;( si col tiene la coleccion completa de col1,,etc  era como contaria los numeros de col1 ??? bueno creo me entiendes , lo bueno es que por fin pude consultar los 100 ejemplos de linq: que me pasaste en su dia :)  y ahora preguntare menos jejejje (espero :(  ) vi muchas rutinas que me hacen falta ;)

Gracias :)

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