在C#中对List <keyvaluepair <string,double =“” >>进行排序

时间:2019-04-30 19:48:31

标签: c# sorting keyvaluepair

我正在开发一个程序,该程序读取csv文件并将它们的值排序到KeyValuePair-List中。

items: [{
  id: "1",
  content: '<iframe width="560" height="315" src="https://www.youtube.com/embed/zjcVPZCG4sM" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>'},
        { id: "2",
  content: '<iframe width="560" height="315" src="https://www.youtube.com/embed/zjcVPZCG4sM" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>'}
]

我的结果是将日期作为字符串,将货币值作为double列出一大堆,像这样:

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;
    }

我的问题是每月将这些KeyValuePair-List拆分为单独的列表。

例如:我只想提取第二个月的所有“ KeyValuePairs”,并将它们写到单独的KeyValuePair-List中。

2 个答案:

答案 0 :(得分:0)

这应该给您一个Dictionary,其中月份的两个字符串表示为Key

SortValues(input).GroupBy(value => value.Key.Substring(3, 2)).ToDictionary(group => group.Key, group => group.ToArray());

可以用一种更加优雅的方式随意解析月份,我认为那部分与您要查找的内容无关。

如果您想利用LINQ的延迟加载,可以将ToArray()替换为Select(_ => _)。两者都是从IEnumerable<KeyValuePair<string,double>>给您的IGrouping对象中取出GroupBy的一种方法。

答案 1 :(得分:0)

您可以使用Substring的代表月份和年份的子字符串(通过使用IndexOf(".")并在List<List<KeyValuePair< string, double>>>之后开始)将项目按特定月份分组,然后选择每个组作为另一个列表中的列表,这样您就可以得到List<List<KeyValuePair<string, double>>> result = valueList .GroupBy(r => r.Key.Substring(r.Key.IndexOf(".") + 1)) .Select(group => group.ToList()) .ToList();

{{1}}