如何使用Linq查找Min()和Set Min元素为0

时间:2013-11-27 14:11:28

标签: c# linq

我有以下

        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

3 个答案:

答案 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();