Separar elementos repetidos de una lista

26/08/2004 - 14:01 por Diego F. | Informe spam
Hola, necesito pasar de una estructura en la que tengo varios elementos, que
pueden estar repetidos, a otra en la que tenga los elementos separados y el
número de veces que aparecen.

Se trata de enteros, y originalmente los tengo en una columna de un DataSet,
aunque los he pasado a un ArrayList por si resulta más fácil, pero no lo veo
claro.

¿Alguien me puede echar un cable?


Saludos,

Diego F.

Preguntas similare

Leer las respuestas

#1 A.Poblacion
26/08/2004 - 16:17 | Informe spam
Si los tienes en un dataset, ¿significa eso que previamente estaban en una
tabla de la base de datos? Porque en ese caso puedes conseguir lo que
quieres con una consulta SQL:

Select Numero, Count(Numero) from LaTabla group by Numero

Si no es asi, convierte el arraylist en array, hazle un sort, y recórrelo
con un bucle.


"Diego F." wrote in message
news:
Hola, necesito pasar de una estructura en la que tengo varios elementos,


que
pueden estar repetidos, a otra en la que tenga los elementos separados y


el
número de veces que aparecen.

Se trata de enteros, y originalmente los tengo en una columna de un


DataSet,
aunque los he pasado a un ArrayList por si resulta más fácil, pero no lo


veo
claro.

Respuesta Responder a este mensaje
#2 Alejandro Perez
26/08/2004 - 16:22 | Informe spam
Como estas Diego? Aqui te lo implemente con un arreglo y
dos arraylist. La verdad desconozco si existe algun metodo
de una clase para agrupacion de elementos repetidos. Si
alguien lo conoce, lo publique :)

Bye!
Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela




Codigo:

ArrayList arrNumero = new ArrayList();
ArrayList arrCantidad = new ArrayList();

int[] Numeros = {2,3,5,1,2,9,5,2,4,5,1};
Array.Sort(Numeros);

int intValor = Numeros[0]+1;
for(int i=0;i<Numeros.Length;i++)
{
if(intValor!=Numeros[i])
{
intValor=Numeros[i];
arrNumero.Add(intValor);
arrCantidad.Add(1);
}
else
arrCantidad[arrNumero.Count-1]=(int)
arrCantidad[arrNumero.Count-1]+1;
}
Respuesta Responder a este mensaje
#3 Octavio Hernandez
26/08/2004 - 17:10 | Informe spam
Diego,

Siendo lo que necesitas obtener pares (objeto, cantidad apariciones), un
SortedList podría ser una buena elección. Prueba esto, te debe valer (fíjate
que el algoritmo es bastante genérico, tus datos podrían ser cadenas en
lugar de enteros):
private SortedList ElementosUnicos(ArrayList a)

{

SortedList tmp = new SortedList();

foreach(object o in a)

{

if (!tmp.ContainsKey(o))

tmp.Add(o, 1);

else

{

int n = (int) tmp[o];

tmp.Remove(o);

tmp.Add(o, n + 1);

}

}

return tmp;

}

private void Form1_Load(object sender, System.EventArgs e)

{

ArrayList a = new ArrayList();

a.Add(2); a.Add(3); a.Add(2); a.Add(9);

a.Add(3); a.Add(2); a.Add(7); a.Add(9);

SortedList b = ElementosUnicos(a);

// Console.WriteLine(b.Count);

for (int i = 0; i < b.Count; i++)

Console.WriteLine("{0} - {1}", b.GetKey(i), b.GetByIndex(i));

}

"Diego F." escribió en el mensaje
news:
Hola, necesito pasar de una estructura en la que tengo varios elementos,


que
pueden estar repetidos, a otra en la que tenga los elementos separados y


el
número de veces que aparecen.

Se trata de enteros, y originalmente los tengo en una columna de un


DataSet,
aunque los he pasado a un ArrayList por si resulta más fácil, pero no lo


veo
claro.

¿Alguien me puede echar un cable?


Saludos,

Diego F.



Respuesta Responder a este mensaje
#4 Diego F.
26/08/2004 - 17:10 | Informe spam
¡ Muchas gracias ! Un código muy elegante; no esperaba tanto :-)


Saludos,

Diego F.


"Alejandro Perez" escribió en el mensaje
news:0aec01c48b78$0e8e7510$
Como estas Diego? Aqui te lo implemente con un arreglo y
dos arraylist. La verdad desconozco si existe algun metodo
de una clase para agrupacion de elementos repetidos. Si
alguien lo conoce, lo publique :)

Bye!
Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela




Codigo:

ArrayList arrNumero = new ArrayList();
ArrayList arrCantidad = new ArrayList();

int[] Numeros = {2,3,5,1,2,9,5,2,4,5,1};
Array.Sort(Numeros);

int intValor = Numeros[0]+1;
for(int i=0;i<Numeros.Length;i++)
{
if(intValor!=Numeros[i])
{
intValor=Numeros[i];
arrNumero.Add(intValor);
arrCantidad.Add(1);
}
else
arrCantidad[arrNumero.Count-1]=(int)
arrCantidad[arrNumero.Count-1]+1;
}
Respuesta Responder a este mensaje
#5 Diego F.
26/08/2004 - 17:52 | Informe spam
Gracias. He utilizado el código que ha dejado Alejandro.


Saludos,

Diego F.


"Octavio Hernandez" escribió en el mensaje
news:%
Diego,

Siendo lo que necesitas obtener pares (objeto, cantidad apariciones), un
SortedList podría ser una buena elección. Prueba esto, te debe valer


(fíjate
que el algoritmo es bastante genérico, tus datos podrían ser cadenas en
lugar de enteros):
private SortedList ElementosUnicos(ArrayList a)

{

SortedList tmp = new SortedList();

foreach(object o in a)

{

if (!tmp.ContainsKey(o))

tmp.Add(o, 1);

else

{

int n = (int) tmp[o];

tmp.Remove(o);

tmp.Add(o, n + 1);

}

}

return tmp;

}

private void Form1_Load(object sender, System.EventArgs e)

{

ArrayList a = new ArrayList();

a.Add(2); a.Add(3); a.Add(2); a.Add(9);

a.Add(3); a.Add(2); a.Add(7); a.Add(9);

SortedList b = ElementosUnicos(a);

// Console.WriteLine(b.Count);

for (int i = 0; i < b.Count; i++)

Console.WriteLine("{0} - {1}", b.GetKey(i), b.GetByIndex(i));

}

"Diego F." escribió en el mensaje
news:
> Hola, necesito pasar de una estructura en la que tengo varios elementos,
que
> pueden estar repetidos, a otra en la que tenga los elementos separados y
el
> número de veces que aparecen.
>
> Se trata de enteros, y originalmente los tengo en una columna de un
DataSet,
> aunque los he pasado a un ArrayList por si resulta más fácil, pero no lo
veo
> claro.
>
> ¿Alguien me puede echar un cable?
>
>
> Saludos,
>
> Diego F.
>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida