如何使用 2D 数组 C# 将结果放入表中

Posted

技术标签:

【中文标题】如何使用 2D 数组 C# 将结果放入表中【英文标题】:How to put results in a table using 2D arrays C# 【发布时间】:2021-12-08 05:31:05 【问题描述】:

我正在尝试在类似于下面显示的示例输出的表中输出我的所有值。谁能告诉我如何才能得到这样的东西?

Example Output

string[] salesReps =

    "Dave", "Sarah", "Juan", "Gilno",
;

string[] months =

    "Jan", "Feb", "Mar", "Apr", "May",
    "Jun", "Jul", "Aug", "Sep",
    "Oct", "Nov", "Dec",
;

int[,] salesStats = new int[4, 12]

     67, 34, 23, 54, 34, 12, 34, 2, 3, 4, 5, 6, ,
     7, 6, 5, 4, 3, 3, 2, 1, 2, 3, 4, 5, ,
     6, 7, 8, 9, 0, 111, 12, 13, 14, 15, 16, 17, ,
     87, 6, 5, 4, 34, 67, 87, 54, 34, 5, 6, 7, ,
;

【问题讨论】:

您可能需要先遍历每列中的值,并检查它们的长度,以便正确地间隔所有内容。此外,您可能应该创建一个对象来保存要组合在一起的信息。使用独立数组是自找麻烦。 Could anyone tell me how I would go about getting something like this with the code I already have 你能改变你已经拥有的代码吗,如果是这样,我会鼓励你选择不同的方向。 是的,我仍然可以编辑我的代码。 【参考方案1】:

这很好用:

int maxSalesRep = salesReps.Max(x => x.Length);
int maxData = months.Max(x => x.Length);

foreach (var stat in salesStats.Cast<int>())

    var text = stat.ToString();
    if (text.Length > maxData)
    
        maxData = text.Length;
    


Console.Write("".PadLeft(maxSalesRep));
Console.Write(" ");
Console.WriteLine(
    String.Join(
        " ",
        months.Select(x => x.PadLeft(maxData))));

for (int i = 0; i < salesReps.Length; i++)

    Console.Write(salesReps[i].PadLeft(maxSalesRep));
    Console.Write(" ");
    Console.WriteLine(
        String.Join(
            " ",
            Enumerable.Range(0, months.Length).Select(j => $"salesStats[i, j]".PadLeft(maxData))));

这给了我:

      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
 Dave  67  34  23  54  34  12  34   2   3   4   5   6
Sarah   7   6   5   4   3   3   2   1   2   3   4   5
 Juan   6   7   8   9   0 111  12  13  14  15  16  17
Gilno  87   6   5   4  34  67  87  54  34   5   6   7

或者稍微好一点:

IEnumerable<string> lines =
        Enumerable
            .Range(0, salesReps.Length)
            .Select(i => Enumerable.Range(0, months.Length).Select(j => salesStats[i, j].ToString().PadLeft(maxData)).StartWith(salesReps[i].PadLeft(maxSalesRep)))
            .StartWith(months.Select(m => m.PadLeft(maxData)).StartWith("".PadLeft(maxSalesRep)))
            .Select(x => String.Join(" ", x));

Console.WriteLine(String.Join(Environment.NewLine, lines));

【讨论】:

【参考方案2】:

你应该可以用 for 循环来实现它

Console.Write("\t");
for (int i = 0; i< months.Length; i++)  //print header
 
    Console.Write(months[i] + "\t");

Console.WriteLine();

for (int i = 0; i < salesReps.Length; i++) //for each sales rep

    Console.Write(salesReps[i] + "\t"); //prints name
    for (int j = 0; j < salesStats.GetLength(1); j++) //for each month
        
            Console.Write(salesStats[i, j] + "\t"); //prints values
        

    Console.WriteLine();

给你这个:

【讨论】:

以上是关于如何使用 2D 数组 C# 将结果放入表中的主要内容,如果未能解决你的问题,请参考以下文章

c#如何将查询后的结果放入list中

如何使用 C# 从表中的二维数组输出值

Python 中的 Bigquery:如何将查询结果放入表中?

如何将变量值与 select 语句的结果一起放入 sql 表中?

如何使用 PHP 和 Mysql 将搜索框放入数据库表中

如何使用着色器程序将 2D 场景放入 QOpenGLWidget 窗口?