我有一个我想要读入数组的文件。
string[] allLines = File.ReadAllLines(@"path to file");
我知道我可以遍历数组并查找包含模式的每一行并显示行号和行本身。
我的问题是:
是否可以使用LINQ做同样的事情?
答案 0 :(得分:10)
是的 - 使用带有索引的Select()
重载我们可以通过投影到包含行本身及其行号的匿名类型来实现此目的:
var targetLines = File.ReadAllLines(@"foo.txt")
.Select((x, i) => new { Line = x, LineNumber = i })
.Where( x => x.Line.Contains("pattern"))
.ToList();
foreach (var line in targetLines)
{
Console.WriteLine("{0} : {1}", line.LineNumber, line.Line);
}
由于控制台输出是副作用,因此它应与LINQ查询本身分开。
答案 1 :(得分:0)
可以使用LINQ。但是,由于您也需要行号,因此通过迭代自己可能会使代码更具可读性:
const string pattern = "foo";
for (int lineNumber = 1; lineNumber <= allLines.Length; lineNumber++)
{
if (allLines[lineNumber-1].Contains(pattern))
{
Console.WriteLine("{0}. {1}", lineNumber, allLines[i]);
}
}
答案 2 :(得分:-1)
这样的事情应该起作用
var result = from line in File.ReadAllLines(@"path")
where line.Substring(0,1) == "a" // put your criteria here
select line