求解高效算法:
比如有两个数组:
string v1 = "11,22,33,44,22";
string v2 = "11,55,66";
首先求解第一个算法:
去掉v1的重复数字,得到结果如下:string v1 = "11,22,33,44";然后求解第二个算法:
就是把没重复数据的v1跟v2比较,如果v1中的某个数据跟v2的某个数据相同的话,则v1中的这个数据要删除掉。结果如下:string v1 = "22,33,44";

解决方案 »

  1.   

    用HashTable吧,用Key值判斷,但是不知道效率怎么樣.
      

  2.   


            static void Main(string[] args)
            {
                Console.WriteLine(GetString("11,22,33,44,22", "11,55,66"));
            }        static string GetString(string str1, string str2)
            {
                string[] t1 = str1.Split(',');
                List<string> list = new List<string>();
                foreach (string s in t1)
                    if (!list.Contains(s))
                        list.Add(s);
                str1 = string.Join(",", list.ToArray());
                t1 = str2.Split(',');
                for (int i = 0; i < t1.Length; i++)
                    if (list.Contains(t1[i]))
                        list.Remove(t1[i]);
                str1 = string.Join(",", list.ToArray());
                return str1;
            }
      

  3.   

    再来个linq版的        static string GetString(string str1, string str2)
            {
                string[] t1 = str1.Split(',').Distinct().ToArray();
                str1 = string.Join(",", t1);//第一步
                string[] t2 = str2.Split(',');
                var query = from s in t1
                            where Array.IndexOf(t2, s) < 0
                            select s;
                str1 = string.Join(",", query.ToArray());//第二步
                return str1;
            }
      

  4.   

    跟2楼差不多,只是用了Distinct()        string GetDistinct(string str1, string str2)
            {
                string[] s1 = str1.Split(',');
                string[] s2 = str1.Split(',');
                List<string> list = new List<string>(s1).Distinct();
                foreach (string s in s2)
                {
                    if (list.Contains(s)) list.Remove(s);
                }
                return string.Join(",", list.ToArray());
            }
      

  5.   

    晕,还搞错了。
            string GetDistinct(string str1, string str2)
            {
                string[] s1 = str1.Split(',').Distinct().ToArray();
                string[] s2 = str1.Split(',');
                List<string> list = new List<string>(s1);
                foreach (string s in s2)
                {
                    if (list.Contains(s)) list.Remove(s);
                }
                return string.Join(",", list.ToArray());
            }
      

  6.   


                string str1 = "11,22,33,44,22";
                string str2 = "11,55,66";            List<string> list1 = new List<string>(str1.Split(','));
                list1.Sort();
                List<string> list2 = new List<string>(str2.Split(','));
                List<string> list = new List<string>();
                foreach (string s in list1)
                {
                    if (!list2.Contains(s) && !list.Contains(s))
                        list.Add(s);
                }            Console.WriteLine(String.Join(",",list.ToArray()));
      

  7.   

    先排序,可以用二分,应该会快点吧
     static void Main(string[] args)
            {
                int[] v1 ={ 11, 22, 33, 44, 22,77 };
                int[] v2 ={ 11,55,66,44 };
                List<int> result = new List<int>();            Array.Sort<int>(v1);
                Array.Sort<int>(v2);            int t=-1;
                bool isInV2;
                for (int i = 0; i < v1.Length; i++)
                {
                    if (v1[i] == t) continue;
                    isInV2 = (Array.BinarySearch<int>(v2,v1[i])>=0);
                    if (!isInV2)
                    {
                        result.Add(v1[i]);
                    }
                    t = v1[i];
                    isInV2 = false;
                }            foreach (int i in result)
                {
                    Console.WriteLine(i);//22,33,77
                }
                
            }
      

  8.   

    不用排序.这个根本不涉及什么算法,只能是不断比较,然后出现重复的马上去掉。其过程都是一个:
    for(int i=0;i<5;i++)
    {
      if(FindString())
       {  v1=CutString();  }
    }