具体顺序四个字符串数组

时间:2015-10-07 09:43:50

标签: c# arrays string sorting

我有关于四个字符串数组的特定顺序的问题。我将描述Inupt值,输出值和我想要的输出值。

的字符串:

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,第三列是t4,第四列是t4。你能帮帮我吗?我做错了什么?

2 个答案:

答案 0 :(得分:0)

如何跟踪您的细胞添加情况(请参阅下面的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]++;
    }
}

答案 1 :(得分: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);
                    }
                }
            }