簡體   English   中英

排序列表 <KeyValuePair<string, double> &gt;在c#中

[英]Sort List<KeyValuePair<string, double>> in c#

我正在開發一個正在讀取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;
    }

我的結果是一個大的日期列表,字符串和貨幣值為double,如下所示:

{[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。

這應該給你一個Dictionary ,其中月份的兩個字符串表示是Key

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

隨意以更優雅的方式解析這幾個月,我認為那部分是你正在尋找的點。

如果您想使用LINQ的延遲加載,可以用Select(_ => _)替換ToArray() Select(_ => _) 兩者都只是從GroupBy為您提供的IGrouping對象中獲取IEnumerable<KeyValuePair<string,double>>一種方法。

您可以使用表示月份和年份的Key的子字符串(通過使用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM