急... 如何比较两个数组中不相同的元素...
数组
int[] a = {1,2,3,4,5,9};
int[] b = {1,4,5,7,8,9};
现在要计算出这两个数组中不相同的元素 : 2,3,7,8
谢谢各位... --------------------编程问答-------------------- 都放到Set里,变成setA、setB,然后setA和setB求差集,并上setB和setA求差集。 --------------------编程问答-------------------- 如果两个数组分别均没有相同的数,可以这么做
将两个数组拼接,然后排序、差分。如果差分值》0,则是不相同的数 --------------------编程问答-------------------- 更正一下:如果差分值 != 0 --------------------编程问答--------------------
int[] a = { 1, 2, 3, 4, 5, 9 };--------------------编程问答-------------------- 也直接用双重循环。 --------------------编程问答-------------------- bool IsEquals(int[]a,int[]b)
int[] b = { 1, 4, 5, 7, 8, 9 };
string s_a = "";
string s_b = "";
foreach (int i in a)
{
s_a += i.ToString() + ',';
}
foreach (int i in b)
{
s_b += i.ToString() + ',';
}
string value = "不相同的元素:";
foreach (int i in a)
{
if (!s_b.Contains(i.ToString()))
value += i.ToString() + ",";
}
foreach (int i in b)
{
if (!s_a.Contains(i.ToString()))
value += i.ToString() + ",";
}
Console.WriteLine(value);
/*
------输出结果------------
不相同的元素:2,3,7,8,
*/
{
for(int i=0;i <a.Length;i++)
if(a[i]!=b[i])
lst.Add(a[i]);
}
或
List<int> list = new List<int>(a);
List<int> list2 = new List<int>(b);
foreach(int i in list)
{
if(!list2.Contains(i))
{}
} --------------------编程问答--------------------
bool IsEquals(int[]a,int[]b)
{
for(int i=0;i <a.Length;i++)
if(a[i]!=b[i])
lst.Add(a[i]);
}
或
List <int> list = new List <int>(a);
List <int> list2 = new List <int>(b);
foreach(int i in list)
{
if(!list2.Contains(i))
{}
}
楼上的,最简单的算法 --------------------编程问答--------------------
似乎有点欠妥?
没有考虑到第二个数组拥有二第一个数组没有的?
static void Main(string[] args)--------------------编程问答-------------------- 帮顶 谁有更好的办法 --------------------编程问答--------------------
{
int[] a = { 1, 2, 3, 4, 5, 9 };
int[] b = { 1, 4, 5, 7, 8, 9 };
string result = "没有的元素:";
foreach (int item in a)
{
if (Array.IndexOf<int>(b, item) == -1)
{
result = string.Concat(result, item, ",");
}
}
foreach (int item in b)
{
if (Array.IndexOf<int>(a, item) == -1)
{
result = string.Concat(result, item, ",");
}
}
Console.WriteLine(result);
Console.ReadKey();
}
private void button1_Click(object sender, EventArgs e)
{
int[] a = { 1, 2, 3, 4, 5, 9 };
int[] b = { 1, 4, 5, 7, 8, 9 };
List<int> result = new List<int>();
foreach (int x in a)//找出数组a中的不同值
{
int m = 0;
foreach (int y in b)
{
if (x != y)
m++;
}
if (m == b.Length)//m==a.Length说明都不相等
result.Add(x);//保存这个都不相等的值
}
foreach (int x in b)//找出数组b中的不同值
{
int m = 0;
foreach (int y in a)
{
if (x != y)
m++;
}
if (m == a.Length)
result.Add(x);
}
foreach (int x in result)
textBox1.AppendText(x + "\r\n");
}
结果为:
2
3
7
8
以上方法适应两个任意长度的数组 --------------------编程问答-------------------- 不懂算法,用了比较笨的方法
int[] a = { 1, 2, 3, 4, 5, 9 };--------------------编程问答--------------------
int[] b = { 1, 4, 5, 7, 8, 9 };
List<int> la = new List<int>(a);
List<int> lb = new List<int>(b);
List<int> lc = new List<int>();
foreach (int i in la)
{
if (!lb.Contains(i))
{
lc.Add(i);
}
}
foreach (int i in lb)
{
if (!la.Contains(i))
{
lc.Add(i);
}
}
//输出测试
foreach (int i in lc)
{
Console.WriteLine(i);
}
Console.ReadLine();
麻烦大家在自己电脑上通过以后再贴
上面的方法,至少两个以上是错误答案 --------------------编程问答-------------------- 我的想法:
从第一个数组中每个元素与第二个数组中的元素比较,如果相等则把第二个数组中的元素移除去,如果不相等记录该元素。最后记录的元素+第二个数组中的元素就是结果 --------------------编程问答--------------------
包括我的?
效率不高,但结果还不至于错吧 --------------------编程问答-------------------- 用归并写了一个。
using System;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
int[] a = { 1, 2, 3, 4, 5, 9, 10 };
int[] b = { 1, 4, 5, 7, 8, 9 };
Array.Sort(a);
Array.Sort(b);
int[] temp = null;
int i = 0, j = 0, k = 0;
while (i < a.Length && j < b.Length)
{
if (a[i] == b[j]) { i++; j++; }
else if (a[i] > b[j]) { Console.WriteLine(b[j]); j++; }
else { Console.WriteLine(a[i]); i++; }
}
if (i < a.Length) { temp = a; k = i; }
else if (j < b.Length) { temp = b; k = j; }
else return;
for (int m = k; m < temp.Length; m++)
Console.WriteLine(temp[m]);
}
}
} --------------------编程问答--------------------
--------------------编程问答-------------------- up --------------------编程问答-------------------- 15楼方法相对好点。。
int[] A = { 1, 2, 3, 4, 5, 9 };
int[] B = { 1, 4, 5, 7, 8, 9 };
// int[] C = A.Intersect(B).ToArray();
// int[] D = A.Union(B).ToArray();
int[] F = A.Except(B).ToArray();
int[] E = B.Except(A).ToArray();
for (int i = 0; i < F.Length; i++)
{
Console.WriteLine(F[i].ToString());
}
for (int j = 0; j < E.Length; j++)
{
Console.WriteLine(E[j].ToString());
}
复杂度最低
--------------------编程问答-------------------- 不知道楼主是不是用的VS2008,我这里提供一个使用LINQ的高效算法:
--------------------编程问答--------------------
using System.Linq;
int[] a = { 1, 2, 3, 4, 5, 9 };
int[] b = { 1, 4, 5, 7, 8, 9 };
var c = a.Cast<int>().Concat(b.Cast<int>()).GroupBy((t) => t).Where((t) => t.Count() == 1);
foreach (var d in c)
{
MessageBox.Show(d.Key.ToString());
}
int[] result=a.Except(b).Concat(b.Except(a)).ToArray();--------------------编程问答-------------------- --------------------编程问答--------------------
+1 很好很强大。赞一个。
--------------------编程问答--------------------
不知道LINQ的时间复杂度是多少,除开LINQ,归并排序应该是最高的了,T(n)=O(nlogn),其它几个都是O(n^2)。当然,就这么几个数讨论时间复杂度似乎有点多余。 --------------------编程问答-------------------- 用linq查询,这样非常的方便。
class Program
{
static void Main(string[] args)
{
int[] i = new int[] { 1, 3, 5, 6 };
int[] j = new int[] { 3, 4, 5, 7 };
var linq = from var1 in i from var2 in j where var1 != var2 select var1;
foreach (var a in linq)
{
Console.WriteLine(a.ToString());
}
}
} --------------------编程问答-------------------- 写了个最蠢的方法...
public class aaa {
public static String check() {
int a[] = new int[] { 1, 2, 3, 4, 5, 9 };
int b[] = new int[] { 1, 4, 5, 7, 8, 9 };
String c = "";
boolean d = false;
int i = 0;
// A数组和B数组比较找出A里面没有的值
for (i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
if (a[i] == b[j]) {
d = false;
break;
} else
d = true;
}
if (d == true)
c += a[i];
}
// B数组和A数组比较找出B里面没有的值
for (i = 0; i < b.length; i++) {
for (int j = 0; j < a.length; j++) {
if (b[i] == a[j]) {
d = false;
break;
} else
d = true;
}
if (d == true)
c += b[i];
}
return c;
}
public static void main(String[] agrs) {
System.out.println(check());
}
}
--------------------编程问答--------------------
public class aaa {
public static String check() {
int a[] = new int[] { 1, 2, 3, 4, 5, 9 };
int b[] = new int[] { 1, 4, 5, 7, 8, 9 };
String c = "";
boolean d = false;
int i = 0;
// A数组和B数组比较找出A里面没有的值
for (i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
if (a[i] == b[j]) {
d = false;
break;
} else
d = true;
}
if (d == true)
c += a[i];
}
// B数组和A数组比较找出B里面没有的值
for (i = 0; i < b.length; i++) {
for (int j = 0; j < a.length; j++) {
if (b[i] == a[j]) {
d = false;
break;
} else
d = true;
}
if (d == true)
c += b[i];
}
return c;
}
public static void main(String[] agrs) {
System.out.println(check());
}
}
--------------------编程问答--------------------
--------------------编程问答-------------------- 简单求结果的话只要双重循环即可
arr1{1,2,3,4,5,9};
arr2{1,4,5,7,8,9};
arr3=arr2+arr1;
for(int i=0;i<arr1.length;i++){
for(int j=0;j<arr2.length;j++){
if(arr2[i]==arr1[i]){
arr3.remove(arr1[i],arr2[i]);
}
}
}
最后arr3 就是了
如果考虑性能的话就像楼上说的使用LINQ,但我还不会用,哈哈 --------------------编程问答--------------------
这个效率高. --------------------编程问答-------------------- int[] a = { 1, 2, 3, 4, 5, 9 };
int[] b = { 1, 4, 5, 7, 8, 9 };
ArrayList array = new ArrayList();
for (int i = 0; i < a.Length; i++)
{
if (!b.Contains(a[i]))
{
Console.WriteLine(a[i]);//找出2,3
}
}
for (int i = 0; i < b.Length; i++)
{
if (!a.Contains(b[i]))
{
Console.WriteLine(b[i]);//找出7,8
}
}
Console.ReadLine(); --------------------编程问答--------------------
多打了个array,不好意思 --------------------编程问答-------------------- 去年的贴了,还不结贴 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
up --------------------编程问答-------------------- good up --------------------编程问答--------------------
幫頂。。。。 --------------------编程问答--------------------
这个看起来只是一行代码,看是简单,但不一定是最高效的,如果直接排序比较的话,可能比这个更高效..... --------------------编程问答--------------------
去年的帖子 --------------------编程问答--------------------
哦不 是前年的帖子 --------------------编程问答--------------------
补充:.NET技术 , C#