选择基于一个字符串数组的文件行

时间:2013-12-11 11:57:38

标签: c# linq

我有一个名字

的数组
string[] arr = { "John", "karl", "Ralf", "Florian" };

而且,我有一个文件行数组

var lines = File.ReadAllLines("test.txt");

而且,在该列的内部,我在该行的特定位置有一些名称,随机名称,例如,第10列到第20列。 我现在怎么做,我有一个encadead循环,我从第一个循环的索引的特定名称逐行搜索

for(int i=0;i<arr.Lenght;i++)
    for(int j=0;j<lines.Lenght;j++)
        if(lines[j].substring(10,10).trim() == arr[i].Trim())
            list.Add(lines[j])

这是一种非常糟糕的方式,我知道:( 但是,我想知道,如果可以使用Linq做到这一点,如果是的话,怎么可能?

3 个答案:

答案 0 :(得分:3)

我认为这应该可以胜任

list = lines.Where(x=>arr.Contains(x.Substring(10,10).Trim()));

它将从行子字符串(10,20)在arr

中的行创建一个列表

答案 1 :(得分:1)

试试这个:

var result = lines
    .Where(line => arr.Contains(line.Substring(10, 10).Trim()))
    .ToList();
不需要Trim元素上的{p> arr - 它们已被修剪。如果您愿意,可以跳过ToList以获取惰性IEnumerable<string>或替换为ToArray

答案 2 :(得分:1)

LINQ,在查询理解语法中:

var result = from line in lines
             let trimmed = line.Substring(10,10).Trim()
             where arr.Contains(trimmed)
             select line;

注意:result将包含非裁剪行的枚举,这是OP代码最初的行。