簡體   English   中英

如何對列表進行分組<dictionary<string,string> &gt; 基於特定鍵並獲得最大值</dictionary<string,string>

[英]How to group a List<Dictionary<string,string>> based on particular key and get the max value

我有以下List<Dictionary<string,string>>

List<Dictionary<string,string>> data = new List<Dictionary<string,string>> 
{
    new Dictionary<string,string> { ["HoleName"] = "first", ["Length"] = "20" },
    new Dictionary<string,string> { ["HoleName"] = "second", ["Length"] = "40" },
    new Dictionary<string,string> { ["HoleName"] = "first", ["Length"] = "30" }
};

我想按HoleName對上面的列表進行分組並獲得最大Length 我嘗試了很多方法,但到目前為止沒有得到任何解決方案。

預期輸出:

List<Dictionary<string,string>> data = new List<Dictionary<string,string>> 
{ 
    new Dictionary<string,string> { ["HoleName"] = "first", ["Length"] = "30" }, 
    new Dictionary<string,string> { ["HoleName"] = "second", ["Length"] = "40" }
};

您可以使用 LINQ。 HoleName獲取字典的最大Length(隨着問題的更新)。

方法一

  1. HoleName

  2. 通過.Max()獲取最大值(獲取最大值前必須將Length轉換為數值類型)。

using System.Linq;

List<Dictionary<string, string>> result = data.GroupBy(x => x.GetValueOrDefault("HoleName"))
    .Select(g => new Dictionary<string, string>
    {
        ["HoleName"] = g.Key,
        ["Length"] = g.Max(x => int.Parse(x.GetValueOrDefault("Length"))).ToString()
    })
    .ToList();


方法二

  1. HoleName ,然后按Length降序排列(必須將Length轉換為數字類型)。

  2. HoleName

  3. 通過.First()從每個組中獲取第一項。

using System.Linq;

List<Dictionary<string, string>> result = data
    .OrderBy(x => x.GetValueOrDefault("HoleName")!)
    .ThenByDescending(x => int.Parse(x.GetValueOrDefault("Length")!))
    .GroupBy(x => x.GetValueOrDefault("HoleName")!)
    .Select(g => g.First())
    .ToList();

var dicHoleName = new Dictionary<string, string>();

foreach (var dic in data)
{
    foreach (var kv in dic)
    {
        if (kv.Key == "HoleName")
        {
            dicHoleName[kv.Key] = kv.Value;
        }
    }
}

暫無
暫無

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

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