用 foreach 输出 table 并格式化好

Output table with foreach and format it nice

我想以漂亮的方式输出程序的结果table。使用 table 我的意思是文件在它们之间列出,然后是制表符和分数在它们之间列出。我怎样才能做到这一点?目前,我的程序能够一次打印出一个文件,但可以打印出所有其他分数。结果应如下所示:

file1 score1
file2 score2
file3 score3

但目前看起来是这样的:

file1 score1 
score2 
score3
file2 score1
score2
score3

我认为第二个 foreach 是错误的,但是我如何在没有 for/foreach 的情况下输出列表中的一个元素?

那是我的代码:

List<string> _fileNameList = new List<string>();
List<double> _counterFleschScore = new List<double>();
string _fileNameList

foreach (string files in _fileNameList)
            {
                Console.Write(files + "\t\t\t\t");

                foreach (double listingFleschScore in _counterFleschScore)
                {
                    Console.Write("{0:N1}", listingFleschScore);
                    Console.WriteLine("");
                }
            }

在这种情况下,您应该使用 for 循环。问题是你有两个嵌套的 foreach 循环。

确保分数列表至少与文件列表一样大,否则您可能会遇到索引超出范围的异常。为了获得完全安全的解决方案,您应该添加一些检查,为清楚起见,我省略了这些检查。

List<string> _fileNameList = new List<string>();
List<double> _counterFleschScore = new List<double>();

for (var i=0;i<_fileNameList.Count;++i)
{
    Console.Write(_fileNameList[i] + "\t\t\t\t");
    Console.Write("{0:N1}", _counterFleschScore[i]);
    Console.WriteLine("");
}

改进后的代码看起来像这样。

var _fileNameList = new List<string>();
var _counterFleschScore = new List<double>();

var count = Math.Min(_fileNameList.Count, _counterFleschScore.Count);
for (var i=0; i < count; ++i)
{
    Console.WriteLine(string.Format("{0}\t\t\t\t{1:N1}", _fileNameList[i], _counterFleschScore[i]));
}

何必费那么大劲,就用:ConsoleTables, Nuget也可以。

还有Console Utilities again Nuget也可以