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个小时内运行完成筛选,无论用什么方法都行,请朋友们告诉我具体做法,谢谢!
listSource .RemoveAll(delegate(string s) { return s.Equals(""); });
能否直接帮我写出来看看,小弟学 NET 没多久,不太明白您的意思。