特定顺序的四个字符串数组
本文关键字:四个 字符串 数组 定顺序 | 更新日期: 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);
}
}
}