如何从列表中找到最低值?

use*_*721 22 c#

 //create the new object for cars
    Cars s1 = new Cars("Toyota", 2005, 500000, "White", "good");//Car1 Ob
    Cars s2 = new Cars("Honda", 2004, 550000, "Black", "fine");//Car2 Ob
    Cars s3 = new Cars("Nissen", 2012, 490000, "Yellow", "best");//Car3 Ob
    Cars s4 = new Cars("Suzuki", 2012, 390000, "Blue", "fine");//Car4 Ob
    Cars s5 = new Cars("BMW", 2012, 1000000, "Green", "Good");//Car5 Ob

    //Create list to add objects into the memory
    List<Cars> list1 = new List<Cars>();
    list1.Add(s1);list1.Add(s2);list1.Add(s3);list1.Add(s4);list1.Add(s5);



 //cars info which has the lowest price
        double lowest_price = 0;
        foreach(Cars a in list1){
        if(a.price <= lowest_price){
            lowest_price = a.price;
            Console.WriteLine(a.price);
            }
        }//end of loop
Run Code Online (Sandbox Code Playgroud)

这是我试图打印出价格最低的汽车信息的代码.但是什么都没有打印出来.

Chr*_*air 52

使用LINQMin扩展方法:

double lowest_price = list1.Min(car => car.price);
Run Code Online (Sandbox Code Playgroud)

此外,您没有指定,但如果您的集合InvalidOperationException中没有指示"序列不包含元素"的汽车,则此操作将失败.如果您可能没有汽车,快速更新可能是:

double lowest_price = list1.Any() ? list1.Min(car => car.price) : 0;
Run Code Online (Sandbox Code Playgroud)

至于为什么你当前的代码什么都不打印,因为你的初始值是0.没有汽车的值为(或小于0).如果要继续使用现有循环,请将初始值更改为可能的最高值:

double lowest_price = Double.MaxValue;
foreach(Cars a in list1){
    if(a.price <= lowest_price){
        lowest_price = a.price;
        Console.WriteLine(a.price);
    }
}//end of loop
Run Code Online (Sandbox Code Playgroud)

请注意,这具有额外的副作用,如果您list1的汽车是空的,那么lowest_price值将是Double.MaxValue.使用现有代码可能会或可能不会引起您的关注.

如果这是一个问题,如果没有汽车需要返回0,你可以稍作调整:

double lowest_price;
if (list1.Any()){
    lowest_price = Double.MaxValue;
    foreach(Cars a in list1){
        if(a.price <= lowest_price){
            lowest_price = a.price;
            Console.WriteLine(a.price);
        }
    }//end of loop
}
else{
    lowest_price = 0;
}
Run Code Online (Sandbox Code Playgroud)


Kin*_*ake 10

您可以在列表中使用Min扩展名.

lowest_price = list1.Min(c => c.price);
Run Code Online (Sandbox Code Playgroud)


yto*_*ano 5

如果您想修复代码以使其正常工作(而不是使用 Linq - 这是推荐的方法),请更改此行:

double lowest_price = 0;
Run Code Online (Sandbox Code Playgroud)

对此:

double lowest_price = double.MaxValue;
Run Code Online (Sandbox Code Playgroud)