当前位置: 首页 > 知识库问答 >
问题:

格式化数组时在“String.join()”中添加新行?

云伯寅
2023-03-14

你好,我是一个新的程序员,我正在尝试格式化数组的方式,在一个特定的数组的结尾有一个换行符。我目前有4个单独的数组,我想在其中排列数组中的每个项到一个特定的模式。我已经完成了这项任务,但现在我被难倒了,因为他们都在一条线上。让我给你举个例子:(顺便说一下,我在datagridview上这样做)

(This is what I want to happen)
Binder Clips Small  pc      12         1260
Selleys All Clear   pc      12         2400
(This is what I am getting)

Binder Clips Small  pc      12          1260        Selleys All Clear      pc    12     2400 

这是我的代码:

//I get these from a datagridview
            var items = carto.Rows
            .Cast<DataGridViewRow>()
            .Select(x => x.Cells[1].Value.ToString().Trim())
            .ToArray();

            var units = carto.Rows
            .Cast<DataGridViewRow>()
            .Select(x => x.Cells[2].Value.ToString().Trim())
            .ToArray();

            var quantity = carto.Rows
            .Cast<DataGridViewRow>()
            .Select(x => x.Cells[6].Value.ToString().Trim())
            .ToArray();

            var prices = carto.Rows
            .Cast<DataGridViewRow>()
            .Select(x => x.Cells[8].Value.ToString().Trim())
            .ToArray();

            //this is what I use to sort out the pattern that I want the arrays to be in
            string[] concat = new string[items.Length * 4];
            int index = 0;
            for (int i = 0; i < items.Length; i++)
            {
                concat[index++] = items[i];
                concat[index++] = units[i];
                concat[index++] = quantity[i];
                concat[index++] = prices[i];
            }

// and this is where I am stuck because I can just put \n, it would ruin the format even more
            cartitems.Text = string.Join(" ", concat); 

我也试着做了这样的事情:

            int j = 0;
            string str = "";

            foreach (var item in concat)
            {
                str += item;
                if (j <= concat.Length - 1)
                {
                    if (j % 3 == 0)
                        str += " ";
                    else
                        str += "\n";
                }
                j++;
            }

这就总结了我的问题,我真的希望你能帮助一个像我这样的新手,我有一种感觉,答案很简单,我只是没有经验。

共有1个答案

松英叡
2023-03-14

C#是一种面向对象的语言,所以我们不妨利用这一点,对吧?

为项目创建类。

class Item
{
    public string Name { get; set; }
    public string Unit { get; set; }
    public string Quantity { get; set; }
    public string Price { get; set; }

    public void WriteLine(TextWriter writer) {
        writer.WriteLine($"{Name} {Unit} {Quantity} {Price}");
    }
}

这就是加载数组的方式。

Item[] concat = new Item[items.Length];
int index = 0;
for (int i = 0; i < items.Length; i++) {
    concat[index++] = new Item { 
        Name = items[i], 
        Unit = units[i], 
        Quantity = quantity[i], 
        Price = prices[i] 
    };
}

这就是如何将它写入控制台的。

foreach(Item item in concat) {
    item.WriteLine(Console.Out);
}

写到文件而不是写到控制台是一个一行的更改。

作为一般规则,您应该将数据结构(数据的存储方式,在这里实现为一个数组)与数据表示(在本例中,写入控制台或文件,在这里由Item.WriteLine方法实现)分开。

 类似资料:
  • 简单地说,我想把javascript中的一个字符串拆分成一个数组,这个数组还应该包括原始字符串中的所有空白空间。 我尝试使用str.split(“”),结果发现 在这个例子中,我希望在“hi”中的“I”后面有一个空格

  • 这是我在ionic应用程序中使用的代码,用于从FireBase中提取产品。 一个例子: 如果我有这样的项目列表: null 项目1 项目2 项目3 项目4 项目1 项目2 项目3 项目4 我不知道它为什么这样做,任何帮助将是非常感谢的。

  • 我正在使用SQL Loader加载Oracle表,并且我对日期格式有问题。包含数据的CSV文件包含格式为YYYY-MM-DD HH:MM:SS的字符串,但Oracle表要求日期格式为DD-MON-YY。 我目前正在逐行查看CSV文件,以查找并重新格式化加载前的任何日期,但文件可以达到1000万行,这可能是一个非常缓慢的过程。SQL Loader是否允许在加载中重新格式化日期? 我在找像这样的东西

  • 利用call函数控制数组的输出格式: #include <stdio.h> int matrix[10][10]; /* 格式化输出数组 */ void print(int matrix[][10], int m, int n) { int i, j; for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j)

  • 我希望生成的代码在每个*之后有一个额外的间隔,但使用foreach方法,但我不确定我做得是否正确 但打印后不会添加标签。是不是摆放错了?

  • 我想在现有数据集中添加一个新列作为数组。这是我现有的数据集。 我有这个静态数据 现在我得到了想要的结果。之后,我应用,它会将col3值分配到每一行。 我就像这样 从这个结果数据集中,我基于col3&col1创建了新列col4(如果col3日期大于特定日期&col1值大于某个值,则col4值为true,否则为false)。