有2个txt文件,数据在100000条左右,基本不会超过这个数
A文件格式为:
"091224000001","369416984474621039","张1","张1、李1","福州欣创摩尔","1"
B文件格式为:
"771366745154366793","张1","张1、李1","1","2009-12-23 16:36:41","福州欣创摩尔","95740551270"AB文件中每一行算一条记录设A[0]表示A数据的第一个值091224000001,每个值用“,”分隔,B[0]也是一样的符合以下条件之一则算匹配:
1、A[1]=B[0]
2、A[2]=B[1]
3、A[3] 包含 B[1]
4、B[2] 包含 A[2]请大家设计一个速度最快的算法,共同探讨一下

解决方案 »

  1.   

    直接读取txt文件 取得内容放到xml试试~~
    system.io.streamwrite sw = new system.io.streamwrite(path);
    strin s = sw.write();
    sw.close();
    return s;
      

  2.   

    1.放内存里,A按A[1]排序,B按B[0]排序;
    2.从前往后遍历,如果A[1]=B[0]则验证2、3、4是否符合。不过10万条数据,数据量挺少的。
      

  3.   

    符合以下条件之一则算匹配:
    1、A[1]=B[0]
    2、A[2]=B[1]
    3、A[3] 包含 B[1]
    4、B[2] 包含 A[2]一。条件a:由于(A[3] 包含 B[1])&& (A[2]=B[1]),那最起码是(A[3]包含A[2]),
    同理(B[2] 包含 B[1]).
    所以可以分别对A,B文件按条件a进行过滤,那么数据量就少了很多,
    之后A按A[1]排序,B按B[0]排序(从小到大);
    如果为了减小读写IO,那么可以直接存在内存中进行排序。
    对于过滤后的数据,如果上面的2满足,那么3,4也就满足了。
    二。条件b:同时打开A,B文件(或者已经在内存中),IF(A[1] > B[0]), 那么B文件读下一条(或内存中下一个记录);ELSE IF(A[1] < B[0]),那么A文件读下一条(或内存中下一个记录);ELSE 判断A[2]是否等于A[1],是则输出即可,不是则(A读下一条或者B读下一条)。