【问题标题】:Using linq to filter out list [closed]使用 linq 过滤列表 [关闭]
【发布时间】:2013-08-02 21:33:18
【问题描述】:

我有一个文件,我已经阅读了所有行 列表行 = File.ReadAllLines(path).ToList(); 列表是这样的:

Remove lines here
...
BEGIN READ
X
Y
Z
END READ
more lines to remove
...

我想保留“BEGIN READ”和“END READ”之间的部分,不包括那些触发器。 如何过滤掉这些行?

【问题讨论】:

  • 要求代码的问题必须表明对所解决问题的最低理解。包括尝试过的解决方案、它们为什么不起作用以及预期的结果。
  • 我已经尝试过循环,如果它点击“BEGIN READ”,则将 bool 设置为 true,如果点击“END READ”,则将该 bool 设置为 false。但我更感兴趣的是尝试使用诸如“where and select”之类的 linq 函数来做到这一点

标签: c# list filter


【解决方案1】:
var lines = File.ReadLines(fname)
                .SkipWhile(line => line != "BEGIN READ")
                .TakeWhile(line => line != "END READ")
                .Skip(1)
                .ToList();

【讨论】:

    【解决方案2】:

    您可以使用Enumerable.SkipWhileTakeWhile 来处理这个问题:

    var linesOfInterest = lines
                            .SkipWhile(l => l != "BEGIN READ")
                            .Skip(1)
                            .TakeWhile(l => l != "END READ");
    

    这将返回这两个标签之间的行。额外的Skip(1) 用于跳过实际的"BEGIN READ" 行本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-02
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      相关资源
      最近更新 更多