我有以下
List<decimal> Prices = new List<decimal>();
Prices.Add(999.99M);
Prices.Add(19.99M);
Prices.Add(2.75M);
Prices.Add(9.99M);
Prices.Add(2.99M);
Prices.Add(2.99M);
Prices.Add(99.99M);
我可以使用Linq来获得最小的值
decimal Min = Prices.Min(r => r);
但是如何在当前列表中将最小值设置为0?
更新
如何处理两个最小的价格,例如2.99和2.99,我只想设置1到0
答案 0 :(得分:9)
List<decimal> Prices = new List<decimal>();
Prices.Add((decimal)999.99);
Prices.Add((decimal)19.99);
Prices.Add((decimal)2.75);
Prices.Add((decimal)9.99);
Prices.Add((decimal)2.99);
Prices.Add((decimal)99.99);
decimal minimum = Prices.Min();
Prices = Prices.Select(price => price > minimum ? price : 0).ToList();
这会将所有价格等于最小值设为0。
更新
如何处理两个最小的价格,例如2.99和2.99,我只想设置1到0
好吧,当这个要求被添加到等式中时,@ lazyberezovsky(暂时删除,现在未删除)解决方案对你来说是正确的:
Prices[Prices.IndexOf(Prices.Min())] = 0;
答案 1 :(得分:4)
var prices = new List<decimal> {
999.99M, 19.99M, 2.75M, 9.99M, 2.99M, 99.99M };
Prices[Prices.IndexOf(Prices.Min())] = 0;
如果您想更新所有最低价格:
var min = Prices.Min();
for (int i = 0; i < Prices.Count; i++)
if (Prices[i] == min)
Prices[i] = 0;
注意:您不必将选择器传递给Enumerable.Min()
方法,您可以使用后缀M
声明小数升,并且可以使用集合初始值设定项来填充价格列表。
答案 2 :(得分:2)
在LINQ中你可以这样做(它会将所有最低价格设置为0)
var min = Prices.Min();
Prices = Prices.Select(x=> x==min? 0:x).ToList();