【问题标题】:How can I get the largest, and smallest number from a list using LINQ, without using Min() Max()?如何在不使用 Min() Max() 的情况下使用 LINQ 从列表中获取最大和最小的数字?
【发布时间】:2020-03-25 08:09:05
【问题描述】:

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

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

【问题讨论】:

  • 您的 arrList 包含字符串!
  • 呃,当然。谢谢!我真是太傻了。
  • 要回答标题:请参阅 OrderBy ;-) 标题应反映 ACTUAL 问题,该问题在正文中得到进一步澄清/支持。

标签: c# linq geo


【解决方案1】:

看起来您的问题是您在字符串值上使用了最小值/最大值。如果您要比较字符串“100”与“90”,则“100”更小,因为 1 float.parse(value) 添加到列表中。

【讨论】:

    【解决方案2】:

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

        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());
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 2013-02-15
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      相关资源
      最近更新 更多