C# 将tsv数据存储在列表中并在其中循环

C# 将tsv数据存储在列表中并在其中循环,c#,linq,visual-studio-2008,tsv,C#,Linq,Visual Studio 2008,Tsv,我想将一些数据从tsv存储到列表中。将其他tsv中的一些数据存储到其他列表中。循环遍历第一个列表,只保留包含第二个列表中数据的行。我不知道如何在列表中存储数据,现在已经使用了var和array。这是代码 文件1示例: 标题\n 数据abc数据 英国广播公司数据 文件2 abc 英国广播公司 cbc 使用系统; 使用System.Collections.Generic; 使用System.Linq; 使用系统文本; 使用系统数据; 使用System.IO; 命名空间控制台应用程序4 { 班级计划

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

文件1示例:

标题\n

数据abc数据

英国广播公司数据

文件2

abc 英国广播公司 cbc

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
使用System.IO;
命名空间控制台应用程序4
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串[]appcode=File.ReadAllLines(@“d:\data\542112107\Desktop\project 1\Project1\Project1\bin\Debug\app_test.txt”);
List appcodeList=新列表();
appcodeList=appcode.ToList();
var记录=(来自文件.ReadAllLines(@“d:\data\542112107\Desktop\project 1\Project1\bin\Debug\instance\u test.txt)中的l)
让碎片=l.Split('\t')
选择新的{Col1=pieces[0],Col2=pieces[1],Col3=pieces[2],Col4=pieces[3]}
)
.Skip(1)
.Distinct()
.OrderBy(c=>c.Col3).ToList();
List ALLDATALLIST=新列表();
AllDataList=records.ToList();
foreach(记录中的var r)
{Console.WriteLine(“{0},{1},{2},{3}”,r.Col1,r.Col2,r.Col3,r.Col4);}
Console.WriteLine();
控制台。WriteLine(“按回车键退出!”);
Console.ReadLine();
}
}
}

一旦你开始工作,你就可以将list2(或list1,以较小者为准)转换成一个查找。。。(
.ToLookup()
)将显著加快
.Contains()
操作。当前的算法是O(nx M),您可以将其简化为O(nlog M)。

我已经编辑了您的标题。请看,“,其中的共识是“不,他们不应该”。好的,兄弟,请记住这一点。如果可以的话,请帮帮我所以假设您将tsv1读入列表1,将tsv2读入列表2,那么您想要列表1和列表2中的所有行吗?本质上是一个列表交集?实际上,我想在第一个和第二个中做一个过滤器。一个循环,用于查找第二个列表中的数据是否也在第一个列表中。如果是,则显示,如果否,则不显示,类似于并集而不是交集1)您可能应该使用
哈希集,而不是
列表或
查找。2) 
Lookup
具有O(1)搜索速度,而不是O(Log(n))搜索速度。嘿,尝试了你的方法,它不会显示任何内容。没有错误,但没有显示任何内容。尝试对hashset执行此操作,没有运气hashset=(hashset);hashset=File.ReadAllLines(@“d:\data\542112107\Desktop\project 1\Project1\Project1\bin\Debug\app_test.txt”);嘿,我更新了问题,以便您可以查看示例文件
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();
        }
    }
}
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); 
   } 
}