我有关于四个字符串数组的特定顺序的问题。我将描述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。你能帮帮我吗?我做错了什么?
答案 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);
}
}
}