C#:如何在string []中获取字符串的长度

时间:2011-04-08 05:39:45

标签: c#

我在C#中有一个字符串集合。我的代码看起来像这样:

string[] lines = System.IO.File.ReadAllLines(@"d:\SampleFile.txt");

我想要做的是找到该集合中字符串的最大长度并将其存储在变量中。目前,我手动编码,如?

int nMaxLengthOfString = 0;
for (int i = 0; i < lines.Length;i++ )
{               
   if (lines[i].Length>nMaxLengthOfString)
   {
      nMaxLengthOfString = lines[i].Length;
   }
}

上面的代码为我工作,但我正在寻找一些内置函数以保持效率,因为myfile中会有数千行:(

2 个答案:

答案 0 :(得分:17)

使用LINQ的一种更简单的方法是:

int maxLength = lines.Max(x => x.Length);

请注意,如果您使用的是.NET 4,则如果以后不需要,则无需先将所有行读入数组:

// Note call to ReadLines rather than ReadAllLines.
int maxLength = File.ReadLines(filename).Max(x => x.Length);

(如果您不使用.NET 4,则可以轻松编写等效的File.ReadLines。)

在内存方面效率更高,但从根本上说, 必须从磁盘读取每一行,而 需要迭代这些行才能查找最大长度。磁盘访问可能是当然的瓶颈。

答案 1 :(得分:3)

如果不是更好,效率肯定不会更糟

但如果您希望简洁,请尝试使用LINQ的lambdas:

lines.Aggregate((a, b) => Math.Max(a.Length, b.Length));

顺便说一句,小点:如果剩下的数据量小于您找到的最长行数,您可以在技术上停止阅读。所以你可以从技术上保存一些步骤,虽然它可能不值得代码。


完全不相关,但仅仅因为我觉得它,这是(优雅!)Scheme版本:

(reduce max (map length lines))