0

我想将一些数据从 tsv 存储到列表中。将其他一些数据从另一个 tsv 存储到另一个列表。遍历第一个列表并仅保留包含第二个列表中数据的行。我不知道如何将数据存储在列表中,目前使用过 var 和 array。这是代码。

文件 1 样本:

标题标题标题标题\n

数据 数据 abc 数据

数据数据英国广播公司数据

文件 2

美国广播公司 英国广播公司 加拿大广播公司

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] appcode = File.ReadAllLines(@"d:\data\542112107\Desktop\project 1\Project1\Project1\bin\Debug\app_test.txt");

            List<string> appcodeList = new List<string>();
            appcodeList = appcode.ToList();
            var records = (from l in File.ReadAllLines(@"d:\data\542112107\Desktop\project 1\Project1\Project1\bin\Debug\instance_test.txt")
                           let pieces = l.Split('\t')
                           select new { Col1 = pieces[0], Col2 = pieces[1], Col3 = pieces[2], Col4 = pieces[3] }
                           )
                .Skip(1)
                .Distinct()
                .OrderBy(c => c.Col3).ToList();
            List<string> AllDataList = new List<string>();
            AllDataList = records.ToList();
           foreach (var r in records)
            { Console.WriteLine("{0}, {1}, {2},{3}", r.Col1, r.Col2, r.Col3, r.Col4); }

            Console.WriteLine();
            Console.WriteLine("Press return key to exit!");
            Console.ReadLine();
        }
    }
}
4

1 回答 1

0
var list1 = File.ReadAllLines("file1.tsv"); 
var list2 = File.ReadAllLines("file2.tsv").Select(x=>x.Trim()); 

//select col3 from list1
foreach (var x in list1.Select(y=>y.Split("\t")[2]) { 
   if (list2.Contains(x.Trim())) { 
      Console.WriteLine(x); 
   } 
}

一旦你开始工作,你可以将 list2(或 list1 中较小的那个)转换为查找 ...(.ToLookup()),这将大大加快.Contains()操作速度。当前的算法是 O(N x M),您可以将其简化为 O(N Log M)。

于 2014-01-13T21:27:23.270 回答