using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //listSource这个列表元素大概在1万-2万之间,每个元素里面的子项都以“,”分割开。每个元素里面固定4个子项。
            List<String> listSource = new List<String>();
            //listDynamic这个列表元素大概在5万-10万之间,每个元素里面的子项都以“,”分割开。每个元素里面固定6个子项。
            List<String> listDynamic = new List<String>();
            //随便添加一些测试数据,实际上数据都是从数据库取出来的,动态变化的
            listSource.Add("01,05,09,10");
            listSource.Add("01,05,09,11");
            listSource.Add("01,03,02,44");
            listSource.Add("02,01,03,28");
           
            listDynamic.Add("01,02,03,07,09,27");
            listDynamic.Add("01,02,03,07,09,28");
            listDynamic.Add("01,02,03,07,09,44");
            listDynamic.Add("01,02,03,07,09,10");
            listDynamic.Add("01,02,03,07,09,55");
            listDynamic.Add("01,02,03,07,09,77");
            listDynamic.Add("01,02,03,07,09,08");            
            //定义个结果列表,存放满足条件的行
            List<String> listResults = new List<String>();
            foreach (String a in listSource)
            {
                foreach (String b in listDynamic)
                {
                    if (than(a, b, 4, 4))
                    {
                        listResults.Add(b);
                    }
                }
            }            foreach (String result in listResults)
            {
                Console.WriteLine(result);
            }
            Console.ReadKey();
        }
        /// <summary>
        /// 比较筛选
        /// </summary>
        /// <param name="stText">字符串(行/元素)</param>
        /// <param name="stRed">字符串(行/元素)</param>
        /// <param name="iStart">元素里面子项最少包含的数字,这个可以变</param>
        /// <param name="iEnd">元素里面子项最多包含的数字,这个可以变</param>
        /// <returns></returns>
        static bool than(String stText, String stRed, int iStart, int iEnd)
        {
            int iCount = 0;
            String[] arText = stText.Split(',');
            String[] arRed = stRed.Split(',');
            for (int i = 0; i < arText.Length; i++)
            {
                for (int j = 0; j < arRed.Length; j++)
                {
                    if (arText[i] == arRed[j])
                    {
                        iCount++;
                    }
                }
            }
            if (iCount >= iStart && iCount <= iEnd)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}
//输出
/*
01,02,03,07,09,27
01,02,03,07,09,28
*/请教有没有其他方法可以实现我想要的功能?筛选出我要想要的结果,我这样运算太慢了。
listSource 如果有1万个元素(行)
listDynamic 如果有10万个元素(行)
照我的方法1个小时都运算不过来(循环运算1万*10万次),只要能在1个小时内运行完成筛选,无论用什么方法都行,请朋友们告诉我具体做法,谢谢!