Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: dont'Exist en 8 Agosto 2019, 21:46 pm



Título: Buscar y contar numeros repetidos en distintos ListView
Publicado por: dont'Exist en 8 Agosto 2019, 21:46 pm
Buenas tardes, estoy atascado.

Estoy tratando de hacer un programa que me muestre, en un ListView, todos los numeros que aparezcan en otros 3 ListView donde tengo numero repartidos 3 ListView distintos (los 3 con 6 filas)

Lo graficaré un poco:


Código:
      ListView1                                    ListView2                                      ListView3
  Posicion / Numero                               Posicion / Numero                              Posicion / Numero
     1            3                                1            2                                  1            3
     2            7                                2            6                                  2            2
     3            7                                3            6                                  3            9
     4            2                                4            3                                  4            9
     5            6                                5            2                                  5            7
     6            7                                6            6                                  6            7


       ListView4
Numero  /  Cantidad
     2            4
     3            3
     6            4
     7            5
     9            2

Bueno, algo así. En donde en el ListView4 es donde estará los numero que aparecen y la cantidad.

Yo intenté anidando varios FOR pero la verdad es que me hice un lío.

Espero que me puedan entender el ejemplo y si me pueden orientar, les agradecería.
Saludos


Título: Re: Buscar y contar numeros repetidos en distintos ListView
Publicado por: Eleкtro en 9 Agosto 2019, 12:35 pm
Puedes utilizar LINQ de la siguiente manera para simplificar el uso de varios búcles/For. De todas formas, todo resultaría más dinámico si en lugar de un ListView adaptases tu código para utilizar un DataGridView enlazando datos de origen en la propiedad DataGridView.DataSource.

(https://i.imgur.com/BBZVIeR.png)

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  4.  
  5.        Dim columnIndex As Integer = 0
  6.  
  7.        ' Unión entre las colecciones de elementos de ListView1, ListView2 y ListView3.
  8.        Dim items As ListViewItem() =
  9.            ({Me.ListView1.Items.Cast(Of ListViewItem),
  10.              Me.ListView2.Items.Cast(Of ListViewItem),
  11.              Me.ListView3.Items.Cast(Of ListViewItem)
  12.             }.SelectMany(Function(sequence) sequence)
  13.            ).ToArray()
  14.  
  15.        ' Agrupación de los elementos mediante pares de clave-valor (clave=texto del elemento, valor=cantidad de repeticiones).
  16.        Dim groups As KeyValuePair(Of String, Integer)() =
  17.            (From item As ListViewItem In items
  18.             Let key As String = item.SubItems(columnIndex).Text
  19.             Order By key Ascending
  20.             Group By key Into keys = Group
  21.             Select New KeyValuePair(Of String, Integer)(key, keys.Count())
  22.            ).ToArray()
  23.  
  24.        ' Creación de nuevos elementos para añadir en el ListView4.
  25.        Dim newItems As ListViewItem() =
  26.            (From group As KeyValuePair(Of String, Integer) In groups
  27.             Select New ListViewItem({group.Key, CStr(group.Value)})
  28.            ).ToArray()
  29.  
  30.        ' Adición de los nuevos elementos al ListView4.
  31.        With Me.ListView4
  32.            .BeginUpdate()
  33.  
  34.            .Items.Clear()
  35.            .Items.AddRange(newItems)
  36.  
  37.            .EndUpdate()
  38.        End With
  39.  
  40.    End Sub
  41.  
  42. End Class

Nótese que en la linea nº 21 del código de arriba, si lo prefieres puedes cambiar el tipo de retorno para devolver un array del tipo ListViewItem directamente.

Saludos.