首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c#中对List<KeyValuePair<string,double>>进行排序

在c#中对List<KeyValuePair<string,double>>进行排序
EN

Stack Overflow用户
提问于 2019-05-01 03:48:31
回答 2查看 431关注 0票数 0

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

代码语言:javascript
运行
复制
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;
    }

我的结果是字符串形式的日期和双精度形式的货币值的大列表,如下所示:

代码语言:javascript
运行
复制
{[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列表分成不同的列表。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-01 04:04:29

这将为您提供一个Dictionary,其中月份的两个字符字符串表示为Key

代码语言:javascript
运行
复制
SortValues(input).GroupBy(value => value.Key.Substring(3, 2)).ToDictionary(group => group.Key, group => group.ToArray());

请随意以更优雅的方式解析月份,我认为这部分与您正在寻找的内容无关。

如果你想利用LINQ的延迟加载,你可以用Select(_ => _)替换ToArray()。这两种方法都只是从GroupBy提供的IGrouping对象中获取IEnumerable<KeyValuePair<string,double>>的一种方法。

票数 0
EN

Stack Overflow用户

发布于 2019-05-01 04:22:00

您可以使用表示月份和年份的Key的子字符串(通过使用Substring并从IndexOf(".")之后开始)来按特定月份对项目进行分组,然后将每个组作为一个列表选择到另一个列表中,这样您就得到了一个List<List<KeyValuePair< string, double>>>

代码语言:javascript
运行
复制
List<List<KeyValuePair<string, double>>> result = valueList
    .GroupBy(r => r.Key.Substring(r.Key.IndexOf(".") + 1))
    .Select(group => group.ToList())
    .ToList();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55927802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档