【发布时间】:2021-02-04 19:16:19
【问题描述】:
我在电子表格(DevExpress 电子表格)中有 5 列。前四列是字符串值。第五列是整数(数字)。我加入了前四列并将其作为 KEY 放在一个列表中,然后将第五列条目作为 VALUE 收集到另一个列表中。我使用这两个列表来创建字典。 现在,我想对与每个重复键相关的值求和。就像你现在一样,字典对象为重复键抛出异常并删除相关的重复键(保留唯一键)。如何对与每个重复键相关的值求和? 我试过这个:
{
IWorkbook workbook = spreadsheetControl.Document;
Worksheet worksheet = workbook.Worksheets.ActiveWorksheet;
CellRange range = worksheet.GetDataRange();
int LastRow = range.BottomRowIndex;
var keys = new List<string>();
var values = new List<int>();
for (int i = 0; i < LastRow + 1; i++)
{
keys.Add(string.Join(",", worksheet.Cells[i, 0].DisplayText, worksheet.Cells[i, 1].DisplayText,
worksheet.Cells[i, 2].DisplayText, worksheet.Cells[i, 3].DisplayText));
values.Add((int)worksheet.Cells[i, 4].Value.NumericValue);
}
var mydic = new Dictionary<string, int>();
for (int i = 0; i < keys.Count; i++)
{
try
{
mydic.Add(keys[i], values[i]);
}
catch (Exception)
{
}
}
}
【问题讨论】:
-
我不想写一个完整的答案,所以让我描述一下这个过程。 1.数据应该在一个数组中,因为字典不能有重复。
array.GroupBy(x => x.Key).ToDictionary(x => x.Key, v => v.ToArray()).现在您将拥有一个包含所有值的键,您可以采用第一个并假设所有值都相同,或者如果值不同,则为它们创建新键等 -
只需在第一个“for”中使用字典即可。检查密钥是否存在。必要时添加密钥。然后通过键提取现有值,将其与新值相加,然后通过键更新现有值。
标签: c#