【问题标题】:C# net finding the shortest and longest lineC# net 找到最短和最长的线
【发布时间】:2015-06-25 06:19:38
【问题描述】:

尝试在文本文件中查找最长和最短的行。最长的返回正确,但最短的总是空白,有什么想法吗?

        var lines = System.IO.File.ReadLines(@"C:\test.txt");            
        var Minimum = "";
        var Maximum = "";


            foreach (string line in lines)
            {

                if (Maximum.Length < line.Length)
                {
                    Maximum = line;
                }


                if (Minimum.Length > line.Length)
                {
                    Minimum = line;
                }
           }

【问题讨论】:

  • 可能是因为您的文件中有一个空行?检查文件我认为它将是最后一行
  • 无空行,最短一行1个字符

标签: c#


【解决方案1】:

您正在设置var Minimum = "";,因为它的长度将为0,它永远不会比文件中的任何行长。将第一行设置为循环前的最小值:

var Minimum = lines[0];

【讨论】:

    【解决方案2】:

    不使用循环..

    Maximum = lines.OrderByDescending(a => a.Length).First().ToString();
    Minimum = lines.OrderBy(a => a.Length).First().ToString();
    

    【讨论】:

    • 为什么要排序两次,不是第一次排序后最长的第一次,最短的最后一次吗?此外,排序的时间复杂度比一个循环大,因此这种解决方案的性能更差。不过它更容易阅读。
    • @juunas 你有没有任何参考表明这种类型使用 lamda 表达式排序两次比 for 循环慢..
    • 任何比较排序的时间复杂度都是 n log n。 OPs 循环是线性的,因此速度更快。
    【解决方案3】:

    Minimum.Length 最初为 0。即

    Minimum.Length > line.Length
    

    永远不会成真,因为所有行都是line.Length &gt;= 0

    解决方案:您应该在迭代之前用第一行初始化Mimimum

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 2021-12-15
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      相关资源
      最近更新 更多