我想将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();
}
}
}
答案 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)。