日期:2014-05-17  浏览次数:20688 次

死机了,有没有更快的算法哦!!
一个List<string>集合,比如list1:{"关闭0","2地方","5法0规","fg","地方","9"}
又是一个List<string>集合,比如list2:{"0","5"}
一个List<int>集合,比如list3:{1,2}


目标:在list1中寻找满足下面条件的元素:

对于list1中的某个元素而言,其包含list2中的元素,并且包含的个数是属于list3中规定的个数,那么,list1中的此元素就算满足条件(上例中有"关闭0"、"5法0规"满足条件)


求出list1中所有满足条件的元素,下面是我的方法:

        public List<string> get_1(List<string> list1, List<string> list2, List<int> list3)  
        {
            List<string> list_中介 = new List<string>(list1);
            List<string> list_返回值 = new List<string>();
            foreach (string s in list_中介)
            {
                bool b = true;                
                foreach (int i in list3)
                {
                    int i_出 = list2.Where(x => s.Contains(x)).Count();  
                    if (i == i_出)
                    {
                        b = false;
                        break;
                    }
                }
                if (b)
                {
                    list1.Remove(s);
                }
            }
            return list1;            
        }


可是,很慢哦,如果list1有1百万个字符串,list2只有2个元素,list3也只有2个数字,计算结果就是死机...........哪位朋友有更好、更快的算法吗?

     
------最佳解决方案--------------------
        static public IEnumerable<string> get_1(List<string> list1, List<string> list2, List<int> list3)
      &nb