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呢?

解决方案 »

  1.   

    以一个数组a[]为基础, 
    遍历另外一个数组b[], 用b[i]和a[]里的每一个元素进行比较, 
    如果b[i]不等于a[]里的任何一个元素的话, 
    把b[i]追加到a[]的最后面。
      

  2.   

    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;
            }
      

  3.   

    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;
            }
      

  4.   

    做了ss1.Length*ss2.Length次比较
      

  5.   


    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);
    }
      

  6.   

    还有个更好的方法using System.Linq;IList<string> c =(from i in a where b.Contains(i) select i).ToList<string>();
      

  7.   

    厉害..
    我还有一个三个循环的..哈哈哈.. 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;
            }
      

  8.   

    linq Intersect(相交)
    说明:取相交项;延迟。即是获取不同集合的相同项(交集)。即先遍历第一个集合,找出所有唯一的元素,然后遍历第二个集合,并将每个元素与前面找出的元素作对比,返回所有在两个集合内都出现的元素。
    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);
      

  9.   

    for是少不了的,哪个效率最高呢?
      

  10.   


    小哥~你到底认真看回复没阿?好几层楼都没用到for,比如9楼.微软提供那么好的功能你都不用,还效率什么啊.