Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: OscarCadenas_91 en 12 Febrero 2015, 02:12 am



Título: vb.net - Items Duplicados y no duplicados de Un Listview
Publicado por: OscarCadenas_91 en 12 Febrero 2015, 02:12 am

Buenas a todos, tengo una duda haber si alguien me puede ayudar, tengo un Listview1, con los siguientes Items:
Código:
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:

Código:
Presentacion_1.pptx
Informe2.docx
Informe3.docx
Informe1.docx

Duplicados:

Código:
Proyecto1.docx
Presentacion_2.docx

Para listar los duplicados hice lo siguiente:
Código
  1.   Dim NuevaLista As New List(Of String)
  2.        Total = ListView1.Items.Count - 1
  3.        For i = 0 To Total
  4.            For j = i + 1 To Total
  5.  
  6.                If ListView1.Items.Item(i).Text = ListView1.Items.Item(j).Text Then
  7.                    NuevaLista.Add(ListView1.Items.Item(i).Text)
  8.                End If
  9.  
  10.            Next
  11.  
  12.        Next
      
      

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











Título: Re: vb.net - Items Duplicados y no duplicados de Un Listview
Publicado por: Eleкtro en 12 Febrero 2015, 06:30 am
Puedes utilizar LINQ para llevarlo a cabo:

Código
  1. Public Class TestForm
  2.  
  3.    ReadOnly items As IEnumerable(Of String) =
  4.        {
  5.            "Informe1.docx",
  6.            "Informe2.docx",
  7.            "Informe3.docx",
  8.            "Presentacion_1.pptx",
  9.            "Presentacion_2.docx",
  10.            "Presentacion_2.docx",
  11.            "Proyecto1.docx",
  12.            "Proyecto1.docx"
  13.        }
  14.  
  15.    Private allDups As IEnumerable(Of String) =
  16.        items.GroupBy(Function(str As String) str).
  17.              Where(Function(group As IGrouping(Of String, String)) group.Count > 1).
  18.              SelectMany(Function(group As IGrouping(Of String, String)) group)
  19.  
  20.    Private uniqueDups As IEnumerable(Of String) =
  21.        items.GroupBy(Function(str As String) str).
  22.              Where(Function(group As IGrouping(Of String, String)) group.Count > 1).
  23.              Select(Function(group As IGrouping(Of String, String)) group.Key)
  24.  
  25.    Private nonDups As IEnumerable(Of String) =
  26.        items.Distinct
  27.  
  28.    Private unique As IEnumerable(Of String) =
  29.        items.Except(uniqueDups)
  30.  
  31.    Private Sub Test() Handles MyBase.Shown
  32.  
  33.        With Me.ListBox1
  34.            .Sorted = True
  35.            .BeginUpdate()
  36.            .Items.AddRange(items.ToArray) ' Todos.
  37.            ' .Items.AddRange(nonDups.ToArray) ' Sin Duplicados.
  38.            ' .Items.AddRange(unique.ToArray) ' Únicos.
  39.            ' .Items.AddRange(allDups.ToArray) ' Duplicados.
  40.            ' .Items.AddRange(uniqueDups.ToArray) ' Duplicados Únicos.
  41.            .EndUpdate()
  42.        End With
  43.  
  44.    End Sub
  45.  
  46. End Class


Output


Todos:
Código:
Informe1.docx
Informe2.docx
Informe3.docx
Presentacion_1.pptx
Presentacion_2.docx
Presentacion_2.docx
Proyecto1.docx
Proyecto1.docx

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

Únicos:
Código:
Informe1.docx
Informe2.docx
Informe3.docx
Presentacion_1.pptx

Duplicados:
Código:
Presentacion_2.docx
Presentacion_2.docx
Proyecto1.docx
Proyecto1.docx

Duplicados Únicos:
Código:
Presentacion_2.docx
Proyecto1.docx


Saludos!


Título: Re: vb.net - Items Duplicados y no duplicados de Un Listview
Publicado por: OscarCadenas_91 en 12 Febrero 2015, 13:55 pm
Muchas Gracias Elektro me ha funcionado correctamente.


Gracias por todo.