首页 > 解决方案 > 如何在不使用 Min() Max() 的情况下使用 LINQ 从列表中获取最大和最小的数字?

问题描述

我一直在开发一个生成纬度和经度的应用程序,现在我需要能够找到最大值和最小值来确定数据集的上限和下限(以及东/西限制)。

我一直在尝试使用 Enumerable.Min 方法对它们进行排序,但它似乎不支持低于 -100.0000 的数字。

我的代码有误吗?如何以最有效的方式获得最大和最小的数字(列表大约有 150,000 多个条目)。

    public static void Main()
    {
        var arr = new string[]{"-88.98559", "-94.98711", "-95.79591", "-98.04622", "100.0001", "-101.57691", "-110.00614"};
        var arrList = new List<string>(){};

        foreach (var value in arr)
        {
            arrList.Add(value);
        }

        Console.WriteLine(arrList.Min().ToString()); //Result : 100.0001, should be -110.00614
        Console.WriteLine(arrList.Max().ToString()); //Result : -98.04622
    }

标签: c#linqgeo

解决方案


看起来您的问题是您在字符串值上使用了最小值/最大值。如果您要比较字符串“100”与“90”,那么“100”会更小,因为 1 < 9。(与“alice”与“bob”没有区别。a < b,即使“bob”更短)如果你想要进行数字比较,那么你必须使 arrList 成为浮点数或其他东西的数组,float.parse(value)然后再添加到列表中。


推荐阅读