Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





buscando una clase en C#

Iniciado por seth444, 10 de Abril de 2008, 11:03:15 AM

« anterior - próximo »

seth444

Hola, soy un novato en programación C# y quería saber si existe alguna clase en este lenguaje (C#) en la cual se me proporcione una estructura parecida a un diccionario y en cuya key pueda utilizar una lista de elementos de tipo base (por ejemplo strings).

Mi idea es utilizar esa estructura para almacenar elementos no repetitivos teniendo como key esa lista. Los elementos de ese diccionario serán objetos, que tendrán una propiedad que devuelve los datos que formarán parte de la key del objeto en el diccionario (por llamar de alguna forma a la esrtructura).

Gracias ^^ y perdonar las molestias.
lt;< Omnia in gloriam Dei facite (1Co 10, 31) >>


seth444

La clase Dictionary<(Of <(TKey, TValue>)>) ya la he utilizado, pero no me vale, puesto que cuando intento insertar un nuevo objeto dentro del diccionario, tengo que ir comparando los elementos de las keys uno a uno a mano, es decir, que esta clase no me proporciona un método para hacer la comparación entre las keys que puedan haber en el diccionario y la del nuevo elemento a meter si la key es una lista.


PD: estoy mirando la clase KeyedCollection<(Of <(TKey, TItem>)>) ( http://msdn2.microsoft.com/es-es/library/ms132438.aspx ), a ver si  con ella puedo hacer lo que me propongo, sin embargo, como soy novato, no termino de enterarme bien.
lt;< Omnia in gloriam Dei facite (1Co 10, 31) >>

cyberon

Sí existe un método en el diccionario para comprobar que la clave existe, es el metodo "ContainsKey"


miralo aqui

seth444

Tienes razón, también lo había mirado, pero este método no da el resultado deseado si la clave que le pasas es una lista de elementos.
lt;< Omnia in gloriam Dei facite (1Co 10, 31) >>

cyberon

Si estás pasando una lista de elementos no te va a funcionar, ten en cuenta que las referencias a los objetos contenidos son distintos, aunque sus valores sean iguales, así que lo que tendrías que hacer es implementar un comparador de la clase contenida en la lista para que te devuelva que son iguales cuando su contenido son iguales, si no no creo que te funcione.

seth444

Eso es lo que hasta ahora he hecho, para salir tirando de momento.

Pero como estoy seguro que el coste de realizar toda la operación de comparación es muy mejorable, preguntaba si existía alguna clase que ya me creara esa estructura similar a un  diccionario que me permitiera tener como key una lista y que además esas comparaciones las hicera por medio de un método eficiente.

;).
lt;< Omnia in gloriam Dei facite (1Co 10, 31) >>

[EX3]

Cita de: "seth444"La clase Dictionary<(Of <(TKey, TValue>)>) ya la he utilizado, pero no me vale, puesto que cuando intento insertar un nuevo objeto dentro del diccionario, tengo que ir comparando los elementos de las keys uno a uno a mano, es decir, que esta clase no me proporciona un método para hacer la comparación entre las keys que puedan haber en el diccionario y la del nuevo elemento a meter si la key es una lista.
Emmm, a ver, no tengo el VC# instalado en la oficina para confirmartelo pero en teoria el objeto Dictionary no te va a permitir meter dos elementos con la misma clave por lo que si quieres saber si existe o no la clave podrias simplemente intentar obtener un valor con dicha clave. Si te devuelve valor es que oviamente la clave existe, de lo contrario te generara una excepcion que si la capturas puedes interpretar como que la clave no existe.
public bool function Exists(string key, Dictionary dic)
{
   try
   {
       object val = (object)dic[key].Value;
       return true;
   }
   catch(Exception ex)
   {
       return false;
   }
}

Quizas el codigo tenga alguna errata pero seria esa la idea que te comentaba.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

seth444

Si, esa idea está clara, gracias ;).

Pero mi problema no es saber si una key de tipo string existe en un determinado diccionario, puesto que para eso tenemos el método ContainsKey.

Mi verdadero problema es saber si una key, que es una lista de string, está es esa estructura, cuyas keys son también listas de strings.

Como dije anteriormente, todo lo tengo implementado y funciona, mi questión es saber si exite alguna clase que me permita hacerlo y además de forma eficiente.


PD: perdonar si no termino de aclarar mi problemática, posiblemente sea por mi falta de experiencia en esto de la programación en C#.
lt;< Omnia in gloriam Dei facite (1Co 10, 31) >>

Vicente

Cita de: "seth444"Si, esa idea está clara, gracias ;).

Pero mi problema no es saber si una key de tipo string existe en un determinado diccionario, puesto que para eso tenemos el método ContainsKey.

Mi verdadero problema es saber si una key, que es una lista de string, está es esa estructura, cuyas keys son también listas de strings.

Como dije anteriormente, todo lo tengo implementado y funciona, mi questión es saber si exite alguna clase que me permita hacerlo y además de forma eficiente.


PD: perdonar si no termino de aclarar mi problemática, posiblemente sea por mi falta de experiencia en esto de la programación en C#.

Puedes o hacerte una lista especial que sea IEquatable<T> o pasarle al diccionario algo que implemente IEqualityComparer<T> (a mi me gusta más esta). No me suena que haya ninguna clase que hace lo que quieres de serie.

Un saludo,

Vicente

seth444

ok,  muchísimas gracias por la ayuda que me habeis ofrecido, ;).
lt;< Omnia in gloriam Dei facite (1Co 10, 31) >>






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.