已知
List<string> A;
值分别为: 
"3",
"5"List<string> B;
值分别为:
"6",
"0",
"3",
"4",
"5"
现在要找出A在B里不存在的值
即:List<string> C  排除A里的值
值应该为
"6",
"0",
"4"
有什么比较好的算法没有?

解决方案 »

  1.   

    whrspsoft3723
    具体怎么弄? 
    想找个效率高的算法
      

  2.   

      private void button3_Click(object sender, EventArgs e)
            {
                List<string> list1 = new List<string>();
                list1.Add("3");
                list1.Add("5");
                List<string> list2 = new List<string>();
                list2.Add("6");
                list2.Add("0");
                list2.Add("3");
                list2.Add("4");
                list2.Add("5");            List<string> list3 = list2.Except(list1).ToList();
                foreach (string i in list3)
                {
                    MessageBox.Show(i.ToString());
                }
            }
      

  3.   


     List<string> A = new List<string>() { "3", "5"};
                List<string> B = new List<string>() { "6", "0", "3", "4", "5" };
                string[] C = null ;
                foreach (string s in A) 
                {
                    if (B.Contains(s))
                    {
                        B.Remove(s);
                    }
                }
                C = new string[B.Count];
                B.CopyTo(C);
                foreach (string s in C)
                {
                    Console.WriteLine(s);
                }
                Console.Read();运行结果为:
      

  4.   

      List<string> B = new List<string> { "6", "0", "3", "4", "5" };
                List<string> A = new List<string> { "3", "5" };
                List<string> list = B.Where(a => !A.Contains(a)).ToList();
      

  5.   

    如果B有序的话,二分查找.
    排序(使B有序)时间复杂度n*logn, 所以总的事件复杂度为n*logn+m*logn=(m+n)*logn如果不排序,就是m*n了。所以如果A, B比较大的话,先排序B还是比较好的。