none
Comparando dois array RRS feed

  • Pergunta

  • Galera preciso comparar dois arrays e pegar o que for igual entre eles, como posso fazer usando linq?

    Obrigado


    SirSmart

    quarta-feira, 7 de junho de 2017 13:15

Respostas

  • O que eu quero saber é o que voce espera como reultado.

    Para fazer esse tipo de pesquisa voce pode fazer isso:

    var resultado = from l in lista2
               where lista1.Any(val => l.Contains(val))
               select l;

    isso vai criar uma extraçao somente os itens da lista2 que contem algum elemento da lista1

    Aqui um exemplo completo:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<string> lista1 = new List<string>();
    
                List<string> lista2 = new List<string>();
    
    
                lista1.Add("Nº_Conta_Cartão1");
                lista1.Add("Nº_Cartão1");
    
                lista2.Add("Nº_Conta_Cartão1|5090180074121005");
                lista2.Add("Nº_Cartão1|5090180074121013");
                lista2.Add("Nº_Conta_Cartão2|235413241234");
                lista2.Add("Nº_Cartão2|6746746746747");
                lista2.Add("Nome Correntista|basdbabsdb asdbab sdb s");
    
                lista2.Add("Nº_Conta_Cartão1|5635463456356");
                lista2.Add("Nº_Cartão1|453345234523452345");
    
                lista2.Add("Nº_Conta_Cartão1|676576764567");
                lista2.Add("Nº_Cartão1|1111111111111111");
    
                lista2.Add("Nº_Conta_Cartão1|7777777777777777");
    
    
    
                var resultado = from l in lista2
                                where lista1.Any(val => l.Contains(val))
                                select l;
    
                Console.WriteLine("Entrada:");
                foreach (string s in lista2)
                    Console.WriteLine(s);
    
                Console.WriteLine();
                Console.WriteLine();
    
                Console.WriteLine("Saida:");
                foreach (string s in resultado)
                    Console.WriteLine(s);
                Console.ReadKey();
            }
        }
    }
    

    o resultado é esse:

    Entrada:
    Nº_Conta_Cartão1|5090180074121005
    Nº_Cartão1|5090180074121013
    Nº_Conta_Cartão2|235413241234
    Nº_Cartão2|6746746746747
    Nome Correntista|basdbabsdb asdbab sdb s
    Nº_Conta_Cartão1|5635463456356
    Nº_Cartão1|453345234523452345
    Nº_Conta_Cartão1|676576764567
    Nº_Cartão1|1111111111111111
    Nº_Conta_Cartão1|7777777777777777
    
    
    Saida:
    Nº_Conta_Cartão1|5090180074121005
    Nº_Cartão1|5090180074121013
    Nº_Conta_Cartão1|5635463456356
    Nº_Cartão1|453345234523452345
    Nº_Conta_Cartão1|676576764567
    Nº_Cartão1|1111111111111111
    Nº_Conta_Cartão1|7777777777777777

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta SirSmart quarta-feira, 7 de junho de 2017 18:25
    quarta-feira, 7 de junho de 2017 15:26
    Moderador

Todas as Respostas

  • Voce tem que usar o Intersect

    public void Linq50() 
    { 
        int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
        int[] numbersB = { 1, 3, 5, 7, 8 }; 
      
        var commonNumbers = numbersA.Intersect(numbersB); 
      
        Console.WriteLine("Common numbers shared by both arrays:"); 
        foreach (var n in commonNumbers) 
        { 
            Console.WriteLine(n); 
        } 
    }

    fonte:https://code.msdn.microsoft.com/LINQ-Set-Operators-374f34fe#intersect1

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Sugerido como Resposta Cliffinho quarta-feira, 7 de junho de 2017 13:34
    quarta-feira, 7 de junho de 2017 13:18
    Moderador
  • Bom dia, SirSmart. Tudo bem? 

    Por ser uma questão de "How to/ Customização" e não de "Break fix/Erro", sugiro a você abrir isso como uma discussão, e não como uma pergunta. 

    Assim você poderá, junto com a comunidade, chegar ao resultado que você espera, da melhor forma possível.

    Para abrir uma discussão, faça o mesmo processo de abrir uma pergunta, mas ao invés de marcar como pergunta, marque como Discussão.

    Assim:



    quarta-feira, 7 de junho de 2017 13:20
  • Desculpa, acabei esquecendo de dizer que os arrays não são exatos, estão dessa forma:

    List<string> lista1 = new List<string>();
    
                List<string> lista2 = new List<string>();
    
    
                lista1.Add("Nº_Conta_Cartão1");
                lista1.Add("Nº_Cartão1");
    
                lista2.Add("Nº_Conta_Cartão1|5090180074121005");
                lista2.Add("Nº_Cartão1|5090180074121013");

    Obrigado


    SirSmart

    quarta-feira, 7 de junho de 2017 13:51
  • Desculpe-me Felipe,

    Mas nao concordo com você. "Pergunta" serve também para saber como usar uma determinada tecnologia, no caso o Linq. Tudo aquilo que pode gerar uma "Resposta" (um codigo, um linq que dirija para uma documetaçao) deve ser categorizada como Pergunta. 

    "Discussão" deve ser usada somente para assuntos onde há possibilidade de diferentes respostas. Exemplo "Quando devo usar Linq",  "Quais sao as tecnologias para substituir tal tecnologia", "Qual é a melhor forma de fazer um ERP". Perguntas de amplo escopo.

    Pelo seu criterio, tudo vai virar discussao aqui. E o objetivo é justamente o contrario. Discussao nao permite que uma resposta seja marcada como a correta.

    Voce pode nos enviar onde foi que voce viu que somente questoes de  "Break fix/Erro" devem ser consideradas perguntas.


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    quarta-feira, 7 de junho de 2017 13:59
    Moderador
  • Mas qual é o resultado que voce deseja obter?

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quarta-feira, 7 de junho de 2017 14:01
    Moderador
  • Por exemplo: Queria procurar nos arrays  se a palavra "Nº_Conta_Cartão1" contem nas duas e da mesma forma o "Nº_Cartão1".

    Obrigado


    SirSmart

    quarta-feira, 7 de junho de 2017 14:20
  • Ainda nao entendi o resultado que voce deseja obter, mas creio que o que voce quer faze nao é comparar dois arrays. O que voce quer fazer é usar um array como critério para o segundo array.

    Nos de um exemplo do que voce espera obter como saida.

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quarta-feira, 7 de junho de 2017 14:34
    Moderador
  • É isso mesmo William, preciso fazer o primeiro array como critério para o segundo array. Como faço isso com linq ?

    Obrigado


    SirSmart

    quarta-feira, 7 de junho de 2017 14:37
  • Eu preciso saber o que voce quer obter como saida antes de responder, senao eu vou ter que concordar com o Felipe. Isso nao é uma questao e sim uma discussao. 

    Nos dê detalhes precisos do que voce quer obter e poderemos te dar uma resposta. Da forma que voce pergunta, todas as nossas repostas serao suposiçoes.

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quarta-feira, 7 de junho de 2017 14:47
    Moderador
  • Preciso obter um resultado usando o primeiro array como critério para o segundo array, como conversamos acima.

    Exemplo:

    "Nº_Conta_Cartão1" que está na lista1, deverá procurar se tem o "Nº_Conta_Cartão1" na lista2. Mas não pode ser procura exata, pois na lista2 temos "Nº_Cartão1|5090180074121013".

    Tem como fazer isso com linq ?

    Obrigado


    SirSmart

    quarta-feira, 7 de junho de 2017 14:53
  • O que eu quero saber é o que voce espera como reultado.

    Para fazer esse tipo de pesquisa voce pode fazer isso:

    var resultado = from l in lista2
               where lista1.Any(val => l.Contains(val))
               select l;

    isso vai criar uma extraçao somente os itens da lista2 que contem algum elemento da lista1

    Aqui um exemplo completo:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<string> lista1 = new List<string>();
    
                List<string> lista2 = new List<string>();
    
    
                lista1.Add("Nº_Conta_Cartão1");
                lista1.Add("Nº_Cartão1");
    
                lista2.Add("Nº_Conta_Cartão1|5090180074121005");
                lista2.Add("Nº_Cartão1|5090180074121013");
                lista2.Add("Nº_Conta_Cartão2|235413241234");
                lista2.Add("Nº_Cartão2|6746746746747");
                lista2.Add("Nome Correntista|basdbabsdb asdbab sdb s");
    
                lista2.Add("Nº_Conta_Cartão1|5635463456356");
                lista2.Add("Nº_Cartão1|453345234523452345");
    
                lista2.Add("Nº_Conta_Cartão1|676576764567");
                lista2.Add("Nº_Cartão1|1111111111111111");
    
                lista2.Add("Nº_Conta_Cartão1|7777777777777777");
    
    
    
                var resultado = from l in lista2
                                where lista1.Any(val => l.Contains(val))
                                select l;
    
                Console.WriteLine("Entrada:");
                foreach (string s in lista2)
                    Console.WriteLine(s);
    
                Console.WriteLine();
                Console.WriteLine();
    
                Console.WriteLine("Saida:");
                foreach (string s in resultado)
                    Console.WriteLine(s);
                Console.ReadKey();
            }
        }
    }
    

    o resultado é esse:

    Entrada:
    Nº_Conta_Cartão1|5090180074121005
    Nº_Cartão1|5090180074121013
    Nº_Conta_Cartão2|235413241234
    Nº_Cartão2|6746746746747
    Nome Correntista|basdbabsdb asdbab sdb s
    Nº_Conta_Cartão1|5635463456356
    Nº_Cartão1|453345234523452345
    Nº_Conta_Cartão1|676576764567
    Nº_Cartão1|1111111111111111
    Nº_Conta_Cartão1|7777777777777777
    
    
    Saida:
    Nº_Conta_Cartão1|5090180074121005
    Nº_Cartão1|5090180074121013
    Nº_Conta_Cartão1|5635463456356
    Nº_Cartão1|453345234523452345
    Nº_Conta_Cartão1|676576764567
    Nº_Cartão1|1111111111111111
    Nº_Conta_Cartão1|7777777777777777

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta SirSmart quarta-feira, 7 de junho de 2017 18:25
    quarta-feira, 7 de junho de 2017 15:26
    Moderador