none
como fazer uma busca de um valor em uma list com arrays dentro? RRS feed

  • Pergunta

  • Olá, eu preciso implementar um sistema antiflood, entao estou testando fazer uma lista com um array dentro:

    private List<string[]> flood = new List<string[]>();

    e para adicionar alguem a lista faço:

    string[] adicionaContato = new string[2];
                adicionaContato[0] = "joao";
                adicionaContato[1] = "0";
                flood.Add(adicionaContato);

    por exemplo se eu fizer:

    MessageBox.Show(flood[0][0]) ele me retorna o joao

    se fizer com flood[0][1] ele retorna o flood do joao, ai eu converteria esse 0 em inteiro, somaria com +1 e retornaria o valor pro flood[0][1]

    Minha duvida é como vou saber a posicao do joao?

    eu posso buscar assim if(flood.Contains( <quero saber o que eu coloco aqui)) alguem tem alguma ideia?

    segunda-feira, 28 de setembro de 2015 18:43

Respostas

  • Para buscar os elementos da sua Lista de um array de String é assim:

    List<string[]> flood = new List<string[]>();
    
    string[] adicionaContato1 = new string[2];
    string[] adicionaContato2 = new string[2];
    
    adicionaContato1[0] = "joao";
    adicionaContato1[1] = "0";
    
    adicionaContato2[0] = "maria";
    adicionaContato2[1] = "0";
    
    flood.Add(adicionaContato1);
    flood.Add(adicionaContato2);
    
    bool stop = false;
    uint index = 0;
    
    foreach(string[] f in flood.ToArray())
    {
    	foreach(string p in f)
    	{
    		if (p.Equals("maria"))
    		{
    			stop = true;
    			break;
    		}
    	}
    	if (stop)
    	{
    		break;
    	}
    	else
    	{
    		index++;
    	}
    }
    
    if (stop) // foi encontrado
    {
    	uint pos = index;
    }

    Um outra forma que poderia te ajudar seria assim:

    Em vez de String coloque um KeyValuePar

    List<KeyValuePair<string, string>> flood = new List<KeyValuePair<string, string>>();
    
    KeyValuePair<string, string> adicionaContato1 = new KeyValuePair<string, string>("0", "joao");
    KeyValuePair<string, string> adicionaContato2 = new KeyValuePair<string, string>("1", "maria");
    
    flood.Add(adicionaContato1);
    flood.Add(adicionaContato2);
    
    KeyValuePair<string, string> adicionaContato = flood.Find(x => x.Value == "joao");

    Eu não sei eu entendi bem o seu questionamento!!!


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta An XY segunda-feira, 28 de setembro de 2015 21:23
    segunda-feira, 28 de setembro de 2015 19:45

Todas as Respostas

  • Para buscar os elementos da sua Lista de um array de String é assim:

    List<string[]> flood = new List<string[]>();
    
    string[] adicionaContato1 = new string[2];
    string[] adicionaContato2 = new string[2];
    
    adicionaContato1[0] = "joao";
    adicionaContato1[1] = "0";
    
    adicionaContato2[0] = "maria";
    adicionaContato2[1] = "0";
    
    flood.Add(adicionaContato1);
    flood.Add(adicionaContato2);
    
    bool stop = false;
    uint index = 0;
    
    foreach(string[] f in flood.ToArray())
    {
    	foreach(string p in f)
    	{
    		if (p.Equals("maria"))
    		{
    			stop = true;
    			break;
    		}
    	}
    	if (stop)
    	{
    		break;
    	}
    	else
    	{
    		index++;
    	}
    }
    
    if (stop) // foi encontrado
    {
    	uint pos = index;
    }

    Um outra forma que poderia te ajudar seria assim:

    Em vez de String coloque um KeyValuePar

    List<KeyValuePair<string, string>> flood = new List<KeyValuePair<string, string>>();
    
    KeyValuePair<string, string> adicionaContato1 = new KeyValuePair<string, string>("0", "joao");
    KeyValuePair<string, string> adicionaContato2 = new KeyValuePair<string, string>("1", "maria");
    
    flood.Add(adicionaContato1);
    flood.Add(adicionaContato2);
    
    KeyValuePair<string, string> adicionaContato = flood.Find(x => x.Value == "joao");

    Eu não sei eu entendi bem o seu questionamento!!!


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta An XY segunda-feira, 28 de setembro de 2015 21:23
    segunda-feira, 28 de setembro de 2015 19:45
  • Deu certo, Fulvio:

    So tive que adaptar assim:

    uint index = 0; < mudei pra int

    uint pos = index; < mudei pra int

    assim eu consigo descobrir quanto flood maria ja tem:

    int floodBuscado =Convert.ToInt32(flood[pos][1]);

    as outras operacoes vao ser faceis de fazer agora:

    para aumentar o flood de maria é so:

    int novoFlood=Convert.ToInt32(flood[pos][1])+1;

    flood[pos][1]=novoFlood;

    Muito obrigado pela ajuda =D

    segunda-feira, 28 de setembro de 2015 21:23