elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Eliminar elementos repetidos en un Array
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Eliminar elementos repetidos en un Array  (Leído 9,913 veces)
okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Eliminar elementos repetidos en un Array
« en: 22 Junio 2015, 18:23 pm »

buenas..

¿Hay alguna forma de eliminar elementos repetidos en un Array?


Me he hecho una función, que me ha costado, el ingeniarlo quiero decir, que es la siguiente:


Código
  1.    Public Function DeleteArrayRepetitions(ByVal strArray1() As String, ByVal Sorted As Boolean) As Array
  2.        Dim strArray2(0) As String
  3.        Dim TempElement As String
  4.        Dim Count1 As Integer
  5.        Dim Count2 As Integer
  6.        For Each TempElement In strArray1
  7.            Count1 += 1
  8.            If Count1 = 1 Then strArray2(0) = TempElement
  9.            If Array.IndexOf(strArray1, TempElement, Count1) = -1 Then
  10.                ReDim Preserve strArray2(Count2)
  11.                strArray2(Count2) = TempElement
  12.                Count2 += 1
  13.            End If
  14.        Next
  15.        If Sorted = True Then Array.Sort(strArray2)
  16.        Return strArray2
  17.    End Function


Lo que hace es comprobar uno por uno los elementos del strArray1 y si no está repetido lo pasa al strArray2, hasta completar una lista sin repeticiones. Una vez el strArray2 está completo lo pasa a la función DeleteArrayRepetitions que también es un Array. Es decir, la función devuelve una lista sin repeticiones.



En un intento de reducirlo más, resulta que obtengo un código más o menos igual solo que esta vez usando Array.LastIndexOf en lugar de Array.IndexOf



Código
  1.    Public Function DeleteArrayRepetitions(ByVal strArray1() As String, ByVal Sorted As Boolean) As Array
  2.        Dim strArray2(0) As String
  3.        Dim Count As Integer = 0
  4.        Dim Count2 As Integer = 0
  5.        For Each Element In strArray1
  6.            Dim Last As Integer = Array.LastIndexOf(strArray1, Element)
  7.            If Count = Last Then
  8.                ReDim Preserve strArray2(Count2)
  9.                strArray2(Count2) = Element
  10.                Count2 += 1
  11.            End If
  12.            Count += 1
  13.        Next
  14.        If Sorted = True Then Array.Sort(strArray2)
  15.        Return strArray2
  16.    End Function




Para usarlo se hace los siguiente:

Código
  1.   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        Dim Numbers() As String = {"1", "5", "5", "5", "4", "1", "12", "4", "55"}
  3.  
  4. 'Quita los elementos repetidos
  5.        Numbers = DeleteArrayRepetitions(Numbers, True)
  6.  
  7. 'Lista los elementos del Array en un ListBox
  8.        For Each Element In Numbers
  9.            ListBox1.Items.Add(Element)
  10.        Next
  11.    End Sub

El ListBox mostrará:

1
12
4
5
55


A pesar que las funciones funcionan bien, debe haber alguna forma más sencilla, alguna función en VBNET que permita hacerlo. He probado con Array y ArrayList, pero no he visto nada.

Sl2


« Última modificación: 23 Junio 2015, 09:57 am por okik » En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: Eliminar elementos repetidos en un Array
« Respuesta #1 en: 22 Junio 2015, 21:55 pm »

Realmente no hay una funcion en .net que te devuelva un array sin elementos repetidos. Todos en alguna ocasión nos hemos encontrado con este problema y debemos implementar nuestras propias funciones para lidiar con él. De hecho la forma en que lo estás haciendo parece sigue el modelo que se utiliza para ello:

· Primer bucle que recorre el array en su totalidad.
·   Segundo bucle que recorre el array después de la posición del bucle 1.
·     Si el elemento no está repetido:
·       Lo agrego al segundo array.
·     Fin
·   Next
· Next


En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: Eliminar elementos repetidos en un Array
« Respuesta #2 en: 23 Junio 2015, 03:16 am »

Citar
¿Hay alguna forma de eliminar elementos repetidos en un Array?

Realmente no hay una funcion en .net que te devuelva un array sin elementos repetidos.

Por supuesto que hay una función en la librería de classes de .Net para eliminar duplicados de un Array / Enumerable, usando LINQ:

IEnumerable.Distinct - MSDN

Citar
Returns distinct elements from a sequence by using the default equality comparer to compare values.

Ejemplo:
Código
  1. Dim values As Integer() = {1, 5, 5, 5, 4, 1, 12, 4, 55}
  2.  
  3. values = values.Distinct(EqualityComparer(Of Integer).Default).ToArray
  4.  
  5. MessageBox.Show(String.Join(", ", values))

El argumento que le asigno al parámetro de la extensión Distinct en este caso es innecesario, puedes dejarlo vacío, pero te he mostrado ese overload para denotar que puedes implementar un comparer personalizado y pasárselo cómo parámetro, aunque esto ya requeriría más trabajo.



He probado con Array y ArrayList, pero no he visto nada.

La Class Array y ArrayList debes tratar de ignorarlas y omitir su utilización por completo, hay opciones mejores,
te sugiero utilizar una coleccion genérica de tipo List(Of T), la cual puedes utilizar el método List.Add y List.AddRange para añadir nuevos elementos a la colección y de esta manera incrementar dinamicamente la colección, en lugar de ir redimensionando un objeto de tipo Array de forma primitiva.

Ejemplo:
Código
  1. Dim int32List As New List(Of Integer) ' From {1, 5, 5, 5, 4, 1, 12, 4, 55}
  2. int32List.AddRange({1, 5, 5, 5, 4, 1, 12, 4, 55})
  3. int32List = int32List.Distinct.ToList
  4.  
  5. MessageBox.Show(String.Join(", ", int32List))

Saludos!
« Última modificación: 23 Junio 2015, 05:33 am por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Eliminar elementos repetidos de un vector
Programación General
GaLaN GaLaNaSo 3000 2 63,373 Último mensaje 16 Noviembre 2011, 06:44 am
por osolmm
Eliminar Elementos repetidos en un array
Programación C/C++
maikelowen 6 7,661 Último mensaje 8 Enero 2015, 10:21 am
por Orubatosu
arreglos con elementos repetidos--
Programación C/C++
bobitttyy 1 2,014 Último mensaje 6 Abril 2015, 14:38 pm
por engel lex
Array elementos repetidos
Programación C/C++
LGG 1 2,939 Último mensaje 5 Mayo 2015, 17:32 pm
por eferion
Eliminar elementos basura de un array en C
Programación C/C++
RuloVerde 3 6,296 Último mensaje 4 Febrero 2017, 23:53 pm
por lfgmespino
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines