Jump to content

Recommended Posts

Posted

Boas,

Gostaria de saber se o acesso a um elemento de um dicionário pode ou não ser feito directamente através da sua chave.

No meu caso específico tenho o dicionário definido da seguinte forma:

Dictionary<Ponto, Casa> casas_tabuleiro = new Dictionary<Ponto, Casa>();

Em que Ponto é apenas uma classe com 2 atributos int (X e Y), a maneira como estou a aceder neste momento é esta:

Digamos que quero aceder então a uma casa a partir do seu ponto

public void metodoTeste(Ponto P)
{
            foreach (KeyValuePair<Ponto, Casa> casa in casas_tabuleiro)
            {
                if (casa.Key.X ==P.X && casa.Key.Y== P.Y)
               //acesso ao elemento com o determinado ponto..
            }
}

Mas devido à grande quantidade de vezes que tenho de ter acesso a um elemento directamente através da sua chave o meu código esta-se a tornar um pouco confuso..

sugestões ?

obrigado desde já 👍

Posted

Sim, você pode acessar o valor simplesmente colocando algo assim:

var valor =dictionario[chave];

então como você está querendo ficaria assim:

casa_no_ponto= casas_tabuleiro[Ponto]

Porém como você está lidando com objetos, você pode ter que implementar o IEqualityComparer na sua classe para isto funcionar, pois ao comparar dois objetos, se eles não forem da mesma instância, mesmo que todos os seus valores sejam iguais, o C# pode os considerar como diferentes, sem a implementação desta interface:

http://msdn.microsoft.com/pt-br/library/system.collections.iequalitycomparer%28v=vs.90%29.aspx

Fernando Lage Bastos - MCP/MCTS/MCPD

Posted

Ahhh isso explica o porque de não estar a conseguir aceder ao objecto através de uma dada chave, não pertencia a mesma instância.. vou já começar a implementar esta interface 🙂 muito obrigado pela resposta foi uma grande ajuda petvetbr valeu mesmo 👍

cumprimentos

Posted

já implementei a interface mas o erro persiste..  🙂

não consigo aceder ao elemento, apesar de aplicar a interface IEqualityComparer<T>,

que tem como membros de interface o gethashvalue e o equals..

apliquei a interface, mas não estou a perceber como é que isso iria resolver o meu problema, uma vez que para aceder ao elemento tenho de fazer

Dicionario [CHAVE]

em que chave é um objecto ponto (x,y) não seria obrigado a usar o ponto.equals ??

ou ele automaticamente compara todos as suas chaves com a que lhe forneci através do metodo equals desta interface ??  😁

obrigado desde já e cumprimentos

Posted

Obrigado pelas respostas rumbafum e petvetbr  😁

Já consegui fazer o que queria com a vossa ajuda, tinha um erro que nao estava a dar conta, nao estava a adicionar a minha classe que implementava as interface de comparação ao constructor do dicionário  ?

Uma vez feito funcionou perfeitamente, está mesmo como pretendia.. uma coisa genial este hashcode agora que li como deve ser foi facil de perceber, isto vai melhorar mesmo muito o código que tenho  😁

obrigado pela ajuda pessoal 🙂

cumprimentos

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.