计算列数的有效方法
Efficient way to count Columns
我需要一些有效的方法来计算 .txt 文件中的列数。我的文件格式:
123.222 333.333 454.45 453.333
14.222 3.333 434.45 423.333
33.2 223.333 434.45 153.333
所以我尝试了这个:
StreamReader sr = new StreamReader(_path);
int ColumnsCount = Array.ConvertAll(sr.ReadLine().Split(' '), Double.Parse).Count();
第一行足以获取此文本格式的列数。
您几乎已经快到极限了。如果您需要转换,只需这样做:
int ColumnsCount = Array.ConvertAll(sr.ReadLine().Split(' '), Double.Parse).Length;
使用 Length
而不是 Count
可以为您保存集合的枚举。如果您不需要转换,只需:
sr.ReadLine().Split(' ').Length;
否则,您仍然需要始终进行读取,并且始终 Split
行。既然没有办法解决这个问题,那就尽快吧。
您可以避免使用 double.Parse
,因为您只对列数感兴趣,并使用带有删除空条目选项的 Split
。您也可以使用 File.ReadLine
并只阅读第一行,例如:
string firstLine = File.ReadLines("filePath").First();
int ColumnsCount = 0;
if (firstLine != null)
{
ColumnsCount = firstLine.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).Length;
}
这会快多少,我不确定,即使会有差异我相信也可以忽略不计。
这是对此的快速回答。无需进行字符串拆分,只需将字符串视为字符数组,并计算空格。这还假设您不能有 0 列 table.
var columnCount = 1;
foreach(var c in File.ReadLines("filePath").First() ?? String.Empty)
{
if (c == ' ')
{
columnCount++;
}
}
return columnCount;
我需要一些有效的方法来计算 .txt 文件中的列数。我的文件格式:
123.222 333.333 454.45 453.333
14.222 3.333 434.45 423.333
33.2 223.333 434.45 153.333
所以我尝试了这个:
StreamReader sr = new StreamReader(_path);
int ColumnsCount = Array.ConvertAll(sr.ReadLine().Split(' '), Double.Parse).Count();
第一行足以获取此文本格式的列数。
您几乎已经快到极限了。如果您需要转换,只需这样做:
int ColumnsCount = Array.ConvertAll(sr.ReadLine().Split(' '), Double.Parse).Length;
使用 Length
而不是 Count
可以为您保存集合的枚举。如果您不需要转换,只需:
sr.ReadLine().Split(' ').Length;
否则,您仍然需要始终进行读取,并且始终 Split
行。既然没有办法解决这个问题,那就尽快吧。
您可以避免使用 double.Parse
,因为您只对列数感兴趣,并使用带有删除空条目选项的 Split
。您也可以使用 File.ReadLine
并只阅读第一行,例如:
string firstLine = File.ReadLines("filePath").First();
int ColumnsCount = 0;
if (firstLine != null)
{
ColumnsCount = firstLine.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).Length;
}
这会快多少,我不确定,即使会有差异我相信也可以忽略不计。
这是对此的快速回答。无需进行字符串拆分,只需将字符串视为字符数组,并计算空格。这还假设您不能有 0 列 table.
var columnCount = 1;
foreach(var c in File.ReadLines("filePath").First() ?? String.Empty)
{
if (c == ' ')
{
columnCount++;
}
}
return columnCount;