![](/img/trans.png)
[英]Dictionary<(string, string, string), List<object>> how to get value that match 1 key of this kind of dictionary
[英]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
值(隨着問題的更新)。
方法一
按HoleName
。
通過.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();
方法二
按HoleName
,然后按Length
降序排列(必須將Length
轉換為數字類型)。
按HoleName
。
通過.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.