Usuário com melhor resposta
C# Interseção e união entre vetores

Pergunta
-
Olá, tudo bem ?!
Eu tenho que fazer uma interseção e união entre vetores, Então no caso da interseção, tenho que verificar qual números são comum entre vetores e escreve-los.
Já no caso da união, tenho que pegar e unir o numero de um vetores com o outro, sem que repita e escreve-los
Até sei o que tem que fazer, mas não estou conseguindo escrever o programa.
Aqui está a descrição do exercício:
Construa um programa em c# que leia 2 vetores inteiros de 5 posições e apresente o
conjunto União e o conjunto Intersecção dos vetores.A linguagem é C#, no estilo Console
Ficaria muito Grato, se alguém pudesse me ajudar.
Obrigado.
Respostas
-
- Marcado como Resposta Marcos SJ quarta-feira, 16 de março de 2016 23:19
Todas as Respostas
-
Segue uma maneira de fazer o que precisa, Luis:
Crie 2 vetores de 5 posições:
int[] vetor1 = new int[] {1, 3, 5, 7 ,9}; int[] vetor2 = new int[] {1, 4, 5, 6, 9};
Crie 2 vetores para receber o resultado:
int[] uniao = new int[5]; int[] intersecao = new int[5];
Para fazer a união, basta juntar index com index, dos vetores 1 e 2, utilizando laço:
Console.WriteLine("UNIÃO"); for (int i = 0; i < uniao.Length; i++) { uniao[i] = Convert.ToInt32(vetor1[i].ToString() + vetor2[i].ToString()); Console.WriteLine(uniao[i]); } Console.WriteLine("*************");
Para a intersecção, compare index com index, e os que forem iguais, imprima:
Console.WriteLine("INTERSECÇÃO"); for (int i = 0; i < intersecao.Length; i++) { var iguais = (from b in vetor1 where vetor1[i] == vetor2[i] select vetor1[i]).FirstOrDefault(); if (list > 0) { interseccao[i] = iguais; Console.WriteLine(interseccao[i]); } } Console.WriteLine("******************");
Console.ReadKey();Nesse caso, o resultado será:
UNIÃO
11
34
55
76
99
INTERSECÇÃO
1
5
9Espero que te ajude, um abraço
Leonardo D'Amato Microsoft .Net Developer
- Editado Leonardo N. D'Amato terça-feira, 11 de junho de 2013 19:03
-
Vide também esse exemplo que fiz, usando StringBuilder:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace forum { class Program { static void Main(string[] args) { int[] vetor1 = new int[] {1, 3, 5, 7 ,9}; int[] vetor2 = new int[] {1, 4, 5, 6, 9}; StringBuilder builderUniao = new StringBuilder("União: "); StringBuilder builderInterseccao = new StringBuilder("Interseccção: "); for (int i = 0; i < vetor1.Length; i++) { builderUniao.Append(vetor1[i].ToString() + vetor2[i].ToString()).Append(" "); var list = (from b in vetor1 where vetor1[i] == vetor2[i] select vetor1[i]).FirstOrDefault(); if (list > 0) { builderInterseccao.Append(list).Append(" "); } } Console.WriteLine(builderUniao + "\n" + builderInterseccao); Console.ReadKey(); } } }
- Editado Leonardo N. D'Amato terça-feira, 11 de junho de 2013 19:03
-
-
Pois na comparação, quando o where não acontecer, ele retorna 0, e aí ficaria 1, 0, 5, 0 ,9.
Esse não é o jeito mais correto, porém, como parece ser exercício de curso/faculdade, não sei se pode usar o que quiser pra fazer. Porque a melhor forma para fazer interseção é usar .Intersect().
Veja abaixo:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace forum { class Program { static void Main(string[] args) { int[] vetor1 = new int[] {1, 3, 5, 7 ,9} ; int[] vetor2 = new int[] { 1, 4, 5, 6, 9 }; StringBuilder builderUniao = new StringBuilder("União: "); StringBuilder builderInterseccao = new StringBuilder("Interseccção: "); IEnumerable<int> inter = vetor1.Intersect(vetor2); foreach (int numero in inter) builderInterseccao.Append(numero).Append(" "); for (int i = 0; i < vetor1.Length; i++) builderUniao.Append(vetor1[i].ToString() + vetor2[i].ToString()).Append(" "); Console.WriteLine(builderUniao + "\n" + builderInterseccao); Console.ReadKey(); } } }
Leonardo D'Amato Microsoft .Net Developer
-
- Marcado como Resposta Marcos SJ quarta-feira, 16 de março de 2016 23:19