原来有个送分帖子,单没有人回答哈
http://topic.csdn.net/u/20091119/15/ff77ed42-dcf8-4fff-8e53-f8e6b30fe40a.html题目:怎么快速找出2个数组中的相同项,数组可能很大
http://topic.csdn.net/u/20091119/15/ff77ed42-dcf8-4fff-8e53-f8e6b30fe40a.html题目:怎么快速找出2个数组中的相同项,数组可能很大
遍历数组a,赋值flag[a[i]]=true;
遍历数组b,检查如果flag[b[i]]为true,显然数组a中有相同的数。
int[] b = new int[10000];
bool[] flag = new bool[MAX]; for (int i = 0; i < MAX; i++)
flag[i] = false; for (int i = 0; i < 10000; i++)
flag[a[i]] = true; for (int i = 0; i < 10000; i++)
if (flag[b[i]])
Console.WriteLine(b[i]); //输出相同元素
string[] arry1 = new string[]{ "aa", "12", "bb" };
string[] arry2 = new string[]{ "bb", "16", "ll", "ds" };foreach (string str in arry1)
{
if (Array.IndexOf(arry2, str) > -1)
{
MessageBox.Show(str.ToString());
}
}
hashtable应该可以的
{
int[] arrA = new int[short.MaxValue];
int[] arrB = new int[short.MaxValue];
Random r = new Random(Environment.TickCount);
for (int i = 0; i < short.MaxValue; i++)
{
arrA[i] = r.Next(0, int.MaxValue);
arrB[i] = r.Next(0, int.MaxValue);
}
//以上是构建数据
int tick = Environment.TickCount;
GetSameItem1(arrA, arrB);
Console.WriteLine(Environment.TickCount - tick);
tick = Environment.TickCount;
GetSameItem2(arrA, arrB);
Console.WriteLine(Environment.TickCount - tick);
tick = Environment.TickCount;
GetSameItem3(arrA, arrB);
Console.WriteLine(Environment.TickCount - tick);
tick = Environment.TickCount;
GetSameItem4(arrA, arrB);
Console.WriteLine(Environment.TickCount - tick);
} static List<int> GetSameItem1(int[] arrA, int[] arrB)
{
List<int> list = new List<int>();
foreach (int i in arrA)
if (Array.IndexOf(arrB, i) > -1)
list.Add(i);
return list;
} static List<int> GetSameItem2(int[] arrA, int[] arrB)
{
List<int> list = new List<int>(arrA);
foreach (int i in arrB)
list.Remove(i);
return list;
} static List<int> GetSameItem3(int[] arrA, int[] arrB)
{
Dictionary<int, bool> dic = new Dictionary<int, bool>();
List<int> list = new List<int>();
foreach (int i in arrA)
{
if (dic.ContainsKey(i))
{
dic[i] = true;
list.Add(i);
}
else
dic.Add(i, false);
}
foreach (int i in arrB)
{
if (dic.ContainsKey(i))
{
dic[i] = true;
list.Add(i);
}
else
dic.Add(i, false);
}
return list;
} static List<int> GetSameItem4(int[] arrA, int[] arrB)
{
return arrA.Intersect(arrB).ToList();
}
{
Dictionary<int, bool> dic = new Dictionary<int, bool>();
List<int> list = new List<int>();
foreach (int i in arrA)
{
if (!dic.ContainsKey(i))
dic.Add(i, false);
}
foreach (int i in arrB)
{
if (dic.ContainsKey(i))
{
dic[i] = true;
list.Add(i);
}
else
dic.Add(i, false);
}
return list;
}