如何在不使用Min()Max()的情况下使用LINQ从列表中获得最大和最小的数字?

时间:2019-11-29 18:40:47

标签: c# linq geo

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

我一直在尝试使用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
    }

2 个答案:

答案 0 :(得分:1)

看起来您的问题是您正在对字符串值使用最小/最大。如果您要比较字符串“ 100”与“ 90”,则“ 100”较小,因为1 <9。(与“ alice”与“ bob”没有区别。即使“ bob”较短,a float.parse(value)设置为列表。

答案 1 :(得分:0)

当然,简单的答案是将我的值存储为双精度(并调整生成的代码以不转换为字符串)。谢谢大家的推动!

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

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

        Console.WriteLine(arrList.Min().ToString());
        Console.WriteLine(arrList.Max().ToString());
    }