将tsv数据存储在列表中并循环遍历它

时间:2014-01-13 21:02:12

标签: c# linq visual-studio-2008 tsv

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

文件1样本:

标题标题标题\ n

数据数据abc数据

数据数据bbc数据

文件2

ABC 英国广播公司 CBC

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();
        }
    }
}

1 个答案:

答案 0 :(得分: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)。