问题描述:
我有一个Manufacturers
列表的场景,每个场景都包含Id
,CapacityCode
,Price
。我想找到最便宜的价格,但仅针对所有制造商都具有相同CapacityCode
的商品。
或
class Manufacturer
{
int Id { get; set; }
string CapacityCode { get; set; }
decimal Price { get; set; }
}
我的目标:
用具有相同容量代码的项目过滤列表,然后找到最低价格。
例如:
{
"Manufacturers": [
{
"Id": 1,
"CapacityCode": "Foo",
"Price": 15
},
{
"Id": 1,
"CapacityCode": "Boo", // Manufacture 2 has no "Boo" so it should be filtered
"Price": 10
},
{
"Id": 2,
"CapacityCode": "Foo",
"Price": 30
},
{
"Id": 2,
"CapacityCode": "Zoo", // Manufacture 1 has no "Zoo" so it should be filtered
"Price": 20
}
}
过滤列表的输出应为:
{
{
"Id": 1,
"CapacityCode": "Foo",
"Price": 15
},
{
"Id": 2,
"CapacityCode": "Foo",
"Price": 30
}
}
因此,最低价格应为15。
我尝试过:
要按CapacityCode
分组并找到最大分组数(在示例中,“ Foo”的计数为2,而“ Boo”和“ Zoo”的计数为1,因此最大值为2)。再次按CapacityCode
对列表进行分组,并检查其组计数是否等于最大组计数,然后用AddRange
将组添加到结果列表中。做一个简单的最小长度。
我的问题:
如何在性能和可读性上实现相同的结果,(通过两次更好的列表分组方法)