特定顺序的四个字符串数组

本文关键字:四个 字符串 数组 定顺序 | 更新日期: 2023-09-27 18:16:37

我有一个关于四个字符串数组的特定顺序的问题。我将描述输入值、输出值和期望的输出值。

字符串:

string[] param, vol, tp, curves;
输入表:

curves | vol | tp | param
curve1 | vo1 | t1 | val1
curve2 | vo1 | t1 | val2
curve3 | vo1 | t1 | val3
curve1 | vo1 | t2 | val4
curve2 | vo1 | t2 | val5
curve3 | vo1 | t2 | val6
curve1 | vo1 | t3 | val7
curve2 | vo1 | t3 | val8
curve3 | vo1 | t3 | val9
我输出:

vol |  t1  |  t2  | t3
vo1 | val1 |      |   
vo1 | val2 |      |  
vo1 | val3 |      |  
vo1 |      | val4 |  
vo1 |      | val5 |  
vo1 |      | val6 |  
vo1 |      |      |  val7
vo1 |      |      |  val8
vo1 |      |      |  val9

使用此代码:

for (int l = 0; l < vol.Length; l++)
{
    mWSheet1.Cells[10 + l, 1] = vol[l];
    if (tp[l] == "t1")
        mWSheet1.Cells[10 + l, 2] = val[l];
    if (tp[l] == "t2")
        mWSheet1.Cells[10 + l, 3] = val[l];
    if (tp[l] == "t3")
        mWSheet1.Cells[10 + l, 4] = val[l];
}

我期望的输出:

vol |  t1  |  t2  | t3
vo1 | val1 | val4 | val7   
vo1 | val2 | val5 | val8   
vo1 | val3 | val6 | val9  

结果表必须在mWSheet1工作表中发布,第一列为vol,第二列为t1,第三列为t2,第四列为t4。你能帮我一下吗?我做错了什么?

特定顺序的四个字符串数组

如何跟踪您的单元格添加(参见下面的counts)。我不知道你的确切代码,所以你可能需要稍微调整一下,但像。

更新:

List<string> columns = new List<string>() { "vo1" };
List<int> counts = new List<int>() { 0 };
for (var item = 0; item < tp.Length; item++)
{
    var columnIndex = columns.IndexOf(tp[item]);
    if (columnIndex == -1)
    {
        columns.Add(tp[item]);
        counts.Add(0);
        columnIndex = columns.IndexOf(tp[item]);
    }
    mWSheet1.Cells[10 + counts[columnIndex], columnIndex] = val[item];
    counts[columnIndex]++;
    if (counts.Max() > counts[0])
    {
        mWSheet1.Cells[10 + counts[0], columnIndex] = vol[item];
        counts[0]++;
    }
}

您可以尝试下面的代码。我使用linq来实现你的输出。

            var grouped = tp.GroupBy(o => o);
            var groupedLength = grouped.Max(o => o.Count());
            for (int l = 0; l < groupedLength; l++)
            {
                worksheet.Cells[10 + l, 1] = vol[l];
                foreach (var tbItem in grouped)
                {
                    if (tbItem.Count() > l)
                    {
                        if (tbItem.Key == "t1")
                            worksheet.Cells[10 + l, 2] = tbItem.ElementAt(l);
                        if (tbItem.Key == "t2")
                            worksheet.Cells[10 + l, 3] = tbItem.ElementAt(l);
                        if (tbItem.Key == "t3")
                            worksheet.Cells[10 + l, 4] = tbItem.ElementAt(l);
                    }
                }
            }