string[] a = {"aa","5","abdc.txt","ggdasgf","asdfs","wert","ads332","sdfgdg3","20sdfs","2safs2","技术","25","0" }; string[] b = {"-2","east","SDLFI","ShangHai08","wert","5","aa" };如何最快求出数组a和数组b的交集并放入数据C呢?
public List<string> Repeat(string[] ss1,string[] ss2) { List<String> list = new List<string>(); foreach (string s in ss1) { if (!list.Contains(s)) list.Add(s); } foreach (string s in ss2) { if (!list.Contains(s)) list.Add(s); } return list; }
public List<string> Intersection(string[] ss1,string[] ss2) { List<string> list = new List<string>(); foreach (string s1 in ss1) { foreach (string s2 in ss2) { if (s1 == s2) { list.Add(s1); } } } return list; }
做了ss1.Length*ss2.Length次比较
string[] a = { "aa", "5", "abdc.txt", "ggdasgf", "asdfs", "wert", "ads332", "sdfgdg3", "20sdfs", "2safs2", "技术", "25", "0" }; string[] b = { "-2", "east", "SDLFI", "ShangHai08", "wert", "5", "aa" }; IList<string> c = new List<string>(); string[] i = a.Count() >= b.Count() ? b : a; string[] j = a.Count() > b.Count() ? a : b; foreach (string str in i) { if (j.Contains(str)) c.Add(str); }
还有个更好的方法using System.Linq;IList<string> c =(from i in a where b.Contains(i) select i).ToList<string>();
厉害.. 我还有一个三个循环的..哈哈哈.. string[] a = { "aa", "5", "abdc.txt", "ggdasgf", "asdfs", "wert", "ads332", "sdfgdg3", "20sdfs", "2safs2", "技术", "25", "0" }; string[] b = { "-2", "east", "SDLFI", "ShangHai08", "wert", "5", "aa" }; List<string> list = HaHaHa(a, b); string[] c = list.ToArray(); public List<string> HaHaHa(string[] ss1, string[] ss2) { List<string> list = new List<string>(); Dictionary<string, bool> dic = new Dictionary<string, bool>(); foreach(string s in ss1) { if(!dic.ContainsKey(s)) dic.Add(s, false); } foreach (string s in ss2) { if (dic.ContainsKey(s)) { dic[s] = true; } } foreach (string key in dic.Keys) { if (dic[key]) { list.Add(key); } } return list; }
遍历另外一个数组b[], 用b[i]和a[]里的每一个元素进行比较,
如果b[i]不等于a[]里的任何一个元素的话,
把b[i]追加到a[]的最后面。
{
List<String> list = new List<string>();
foreach (string s in ss1)
{
if (!list.Contains(s))
list.Add(s);
}
foreach (string s in ss2)
{
if (!list.Contains(s))
list.Add(s);
}
return list;
}
{
List<string> list = new List<string>();
foreach (string s1 in ss1)
{
foreach (string s2 in ss2)
{
if (s1 == s2)
{
list.Add(s1);
}
}
}
return list;
}
string[] a = { "aa", "5", "abdc.txt", "ggdasgf", "asdfs", "wert", "ads332", "sdfgdg3", "20sdfs", "2safs2", "技术", "25", "0" };
string[] b = { "-2", "east", "SDLFI", "ShangHai08", "wert", "5", "aa" };
IList<string> c = new List<string>();
string[] i = a.Count() >= b.Count() ? b : a;
string[] j = a.Count() > b.Count() ? a : b;
foreach (string str in i)
{
if (j.Contains(str))
c.Add(str);
}
我还有一个三个循环的..哈哈哈.. string[] a = { "aa", "5", "abdc.txt", "ggdasgf", "asdfs", "wert", "ads332", "sdfgdg3", "20sdfs", "2safs2", "技术", "25", "0" };
string[] b = { "-2", "east", "SDLFI", "ShangHai08", "wert", "5", "aa" };
List<string> list = HaHaHa(a, b);
string[] c = list.ToArray(); public List<string> HaHaHa(string[] ss1, string[] ss2)
{
List<string> list = new List<string>();
Dictionary<string, bool> dic = new Dictionary<string, bool>();
foreach(string s in ss1)
{
if(!dic.ContainsKey(s))
dic.Add(s, false);
}
foreach (string s in ss2)
{
if (dic.ContainsKey(s))
{
dic[s] = true;
}
}
foreach (string key in dic.Keys)
{
if (dic[key])
{
list.Add(key);
}
}
return list;
}
说明:取相交项;延迟。即是获取不同集合的相同项(交集)。即先遍历第一个集合,找出所有唯一的元素,然后遍历第二个集合,并将每个元素与前面找出的元素作对比,返回所有在两个集合内都出现的元素。
string[] a = { "aa", "5", "abdc.txt", "ggdasgf", "asdfs", "wert", "ads332", "sdfgdg3", "20sdfs", "2safs2", "技术", "25", "0" };
string[] b = { "-2", "east", "SDLFI", "ShangHai08", "wert", "5", "aa" };
var c=a.Intersect(b);
小哥~你到底认真看回复没阿?好几层楼都没用到for,比如9楼.微软提供那么好的功能你都不用,还效率什么啊.