Hacer un IN en C#

08/02/2007 - 08:47 por Pelusa | Informe spam
Hola a tod@s,

¿alguien sabe si en C# se puede hacer algo parecido a un IN?

es decir, algo semejante a esto:

int i = 3;

if (i IN (1,3,5,7))
{
hacer_algo();
}

Preguntas similare

Leer las respuestas

#1 Roberto M. Oliva
08/02/2007 - 12:03 | Informe spam
Hola, si son enteros, es mas bien sencillo asi:

int[] i = {1, 3, 5, 7};
if (new ArrayList(i).Contains(3))
{
MessageBox.Show(("Encontrado"));
}

Contains compara instancias de objetos, si creas dos objetos cuyo
estado es identico, pero son instancias diferentes, Contains va a
fallar, a no ser que sobrecarges la funcion Object.Equals.

Tambien lo puedes hacer asi:

int val = 3;
if(Array.Find(i, delegate(int p)
{
return p == val;
}) == val)
{
MessageBox.Show("Encontrado");
}

Pero lo bueno es que lo puedes implementar en una sola linea y seguro
que te vale para cualquier tipo de objeto.

Un saludo

Roberto M. Oliva

On 8 feb, 11:31, "Paco Ferre" wrote:
On 8 feb, 08:47, Pelusa wrote:



> Hola a ,

> ¿alguien sabe si en C# se puede hacer algo parecido a un IN?

> es decir, algo semejante a esto:

> int i = 3;

> if (i IN (1,3,5,7))
> {
> hacer_algo();

> }- Ocultar texto de la cita -

> - Mostrar texto de la cita -

A ver si esto sirve, no lo he probado.

int[] lista = new int[] {1, 3, 5, 7, 8, 15}

foreach(int i in lista)
{

}
Respuesta Responder a este mensaje
#2 Harvey Triana
08/02/2007 - 15:07 | Informe spam
int In(int i, params int[] a)
{
return Array.Find(a, delegate(int p){ return p == i; });
}
// ejemplo:
if (In(i,1,3,5,7) == i)
MessageBox.Show("hacer_algo");
else
MessageBox.Show("no en lista");

Aunque hay algo que no me gusta, la comparación In(i,1,3,5,7) == i. ¿Alguien
sabe como evitarla, y que se retorne un bool?

<HT />
http://vexpert.mvps.org


"Pelusa" escribió en el mensaje
news:
Hola a ,

¿alguien sabe si en C# se puede hacer algo parecido a un IN?

es decir, algo semejante a esto:

int i = 3;

if (i IN (1,3,5,7))
{
hacer_algo();
}
Respuesta Responder a este mensaje
#3 Roberto M. Oliva
08/02/2007 - 15:40 | Informe spam
Hola Harvey!

Lo he puesto en mi anterior mensaje. Aplicado al tuyo seria:

bool In(int i, params int[] a)
{
return (Array.Find(a, delegate(int p){ return p == i; }) == i);
}

// ejemplo:
if (In(i,1,3,5,7))
MessageBox.Show("hacer_algo");
else
MessageBox.Show("no en lista");

Saludos
Roberto M. Oliva


On 8 feb, 15:07, "Harvey Triana" wrote:
int In(int i, params int[] a)
{
return Array.Find(a, delegate(int p){ return p == i; });}

// ejemplo:
if (In(i,1,3,5,7) == i)
MessageBox.Show("hacer_algo");
else
MessageBox.Show("no en lista");

Aunque hay algo que no me gusta, la comparación In(i,1,3,5,7) == i. ¿Alguien
sabe como evitarla, y que se retorne un bool?

<HT />http://vexpert.mvps.org

"Pelusa" escribió en el mensajenews:

> Hola a ,

> ¿alguien sabe si en C# se puede hacer algo parecido a un IN?

> es decir, algo semejante a esto:

> int i = 3;

> if (i IN (1,3,5,7))
> {
> hacer_algo();
> }
Respuesta Responder a este mensaje
#4 Alberto Poblacion
08/02/2007 - 16:30 | Informe spam
"Harvey Triana" wrote in message
news:
int In(int i, params int[] a)
{
return Array.Find(a, delegate(int p){ return p == i; });
}

Aunque hay algo que no me gusta, la comparación In(i,1,3,5,7) == i.
¿Alguien sabe como evitarla, y que se retorne un bool?



Aunque sea menos "elegante", con el enfoque "tradicional" se genera un
código compilado que corre casi el triple que el código anterior:

bool In(int i, params int[] a)
{
for (int j=0; j<a.Length; j++)
if (a[j]==i) return true;
return false;
}
Respuesta Responder a este mensaje
#5 Harvey Triana
08/02/2007 - 17:00 | Informe spam
De acuerdoAlberto la primera intensión es hacerlo así. Aunque me pico la
curiosidad de aplicar los genericos... De paso se aprende algo de lo nuevo.

El que corra el triple podría ser discutible, ya que es busqueda secuencial.
Por supuesto se podría mejorar el algoritmo de búsqueda. Pero para la
funcion In() es perfecta la busqueda secuencial.

Saludes,
<HT />

"Alberto Poblacion"
escribió en el mensaje news:
"Harvey Triana" wrote in message
news:
int In(int i, params int[] a)
{
return Array.Find(a, delegate(int p){ return p == i; });
}

Aunque hay algo que no me gusta, la comparación In(i,1,3,5,7) == i.
¿Alguien sabe como evitarla, y que se retorne un bool?



Aunque sea menos "elegante", con el enfoque "tradicional" se genera un
código compilado que corre casi el triple que el código anterior:

bool In(int i, params int[] a)
{
for (int j=0; j<a.Length; j++)
if (a[j]==i) return true;
return false;
}


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida