【发布时间】:2019-09-19 12:29:58
【问题描述】:
我正在开发一个程序,它正在读取 csv 文件并将它们的值排序到 KeyValuePair-List 中。
private List<KeyValuePair<string, double>> SortValues(string[,] csvData)
{
var dateList = new List<String>();
var valuesList = new List<double>();
List<KeyValuePair<string, double>> valueList = new List<KeyValuePair<string, double>>();
for (int i = 1; i < csvData.GetLength(0) - 1; i++)
{
String date = csvData[i, 1];
String values = csvData[i, 14];
date = date.Remove(0, 1);
date = date.Remove(date.Length - 1, 1);
values = values.Remove(0, 1);
values = values.Remove(values.Length - 1, 1);
dateList.Add(date);
valuesList.Add(Double.Parse(values));
valueList.Add(new KeyValuePair<string, Double>(date, Double.Parse(values)));
}
var result = valueList
.GroupBy(r => r.Key)
.Select(r => new KeyValuePair<string, double>(r.Key, r.Sum(p => p.Value)))
.ToList();
return result;
}
我的结果是一大串日期为字符串,货币值为双精度值,如下所示:
{[29.03.19, EUR]}{[28.03.19, EUR]}{[27.03.19, EUR]}{[26.03.19, EUR]}{[25.03.19, EUR]}{[19.03.19, EUR]}{[18.03.19, EUR]}{[14.03.19, EUR]}{[12.03.19, EUR]}{[11.03.19, EUR]}{[08.03.19, EUR]}{[07.03.19, EUR]}{[06.03.19, EUR]}{[05.03.19, EUR]}{[04.03.19, EUR]}{[01.03.19, EUR]}{[28.02.19, EUR]}{[27.02.19, EUR]}{[26.02.19, EUR]}{[19.02.19, EUR]}{[12.02.19, EUR]}{[11.02.19, EUR]}{[07.02.19, EUR]}{[05.02.19, EUR]}{[04.02.19, EUR]}{[01.02.19, EUR]}
我的问题是将这些 KeyValuePair-List 拆分为每个月的单独列表。
例如:我想只提取第二个月的所有“KeyValuePairs”并将它们写入单独的 KeyValuePair-List。
【问题讨论】:
-
我建议使用值元组而不是
KeyValuePair。 -
我需要“KeyValuePair-List”,因为这是我需要的格式,将其放入图表中
-
@Dai 你能详细介绍一下额外的学习曲线将如何简化 OP 的问题吗?
-
.GroupBy(r => r.Key.Substring(r.Key.IndexOf(".") + 1))将由第一个'.'字符之后的Key形成的字符串分组,我相信它是Month.Year。 -
我得到 {[03.19, EUR]} {[02.19, EUR]} 我不想对月份值求和,我需要将每个月的每个值放在一个单独的列表中,知道吗? :)
标签: c# sorting keyvaluepair