vb.net - Items Duplicados y no duplicados de Un Listview

Iniciado por OscarCadenas_91, 12 Febrero 2015, 02:12 AM

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

OscarCadenas_91


Buenas a todos, tengo una duda haber si alguien me puede ayudar, tengo un Listview1, con los siguientes Items:

Proyecto1.docx
Presentacion_1.pptx
Informe2.docx
Proyecto1.docx
Informe3.docx
Presentacion_2.docx
Informe1.docx
Presentacion_2.docx



Lo que quiero hacer es  separar los Items duplicados  y los no duplicados:

No Duplicados:

Presentacion_1.pptx
Informe2.docx
Informe3.docx
Informe1.docx


Duplicados:

Proyecto1.docx
Presentacion_2.docx


Para listar los duplicados hice lo siguiente:
Código (vbnet) [Seleccionar]
   Dim NuevaLista As New List(Of String)
        Total = ListView1.Items.Count - 1
        For i = 0 To Total
            For j = i + 1 To Total

                If ListView1.Items.Item(i).Text = ListView1.Items.Item(j).Text Then
                    NuevaLista.Add(ListView1.Items.Item(i).Text)
                End If

            Next

        Next

      
      

Ahora necesito alguna idea para obtener para los no Duplicados, alguien me daria alguna idea?










Eleкtro

#1
Puedes utilizar LINQ para llevarlo a cabo:

Código (vbnet) [Seleccionar]
Public Class TestForm

   ReadOnly items As IEnumerable(Of String) =
       {
           "Informe1.docx",
           "Informe2.docx",
           "Informe3.docx",
           "Presentacion_1.pptx",
           "Presentacion_2.docx",
           "Presentacion_2.docx",
           "Proyecto1.docx",
           "Proyecto1.docx"
       }

   Private allDups As IEnumerable(Of String) =
       items.GroupBy(Function(str As String) str).
             Where(Function(group As IGrouping(Of String, String)) group.Count > 1).
             SelectMany(Function(group As IGrouping(Of String, String)) group)

   Private uniqueDups As IEnumerable(Of String) =
       items.GroupBy(Function(str As String) str).
             Where(Function(group As IGrouping(Of String, String)) group.Count > 1).
             Select(Function(group As IGrouping(Of String, String)) group.Key)

   Private nonDups As IEnumerable(Of String) =
       items.Distinct

   Private unique As IEnumerable(Of String) =
       items.Except(uniqueDups)

   Private Sub Test() Handles MyBase.Shown

       With Me.ListBox1
           .Sorted = True
           .BeginUpdate()
           .Items.AddRange(items.ToArray) ' Todos.
            ' .Items.AddRange(nonDups.ToArray) ' Sin Duplicados.
           ' .Items.AddRange(unique.ToArray) ' Únicos.
           ' .Items.AddRange(allDups.ToArray) ' Duplicados.
           ' .Items.AddRange(uniqueDups.ToArray) ' Duplicados Únicos.
           .EndUpdate()
       End With

   End Sub

End Class



Output



Todos:
Informe1.docx
Informe2.docx
Informe3.docx
Presentacion_1.pptx
Presentacion_2.docx
Presentacion_2.docx
Proyecto1.docx
Proyecto1.docx


Sin Duplicados:
Informe1.docx
Informe2.docx
Informe3.docx
Presentacion_1.pptx
Presentacion_2.docx
Proyecto1.docx


Únicos:
Informe1.docx
Informe2.docx
Informe3.docx
Presentacion_1.pptx


Duplicados:
Presentacion_2.docx
Presentacion_2.docx
Proyecto1.docx
Proyecto1.docx


Duplicados Únicos:
Presentacion_2.docx
Proyecto1.docx



Saludos!








OscarCadenas_91

Muchas Gracias Elektro me ha funcionado correctamente.


Gracias por todo.