首页 > 解决方案 > 无法将类型“double”隐式转换为“int”

问题描述

我是一个初学者,正在经历一些足够简单的挑战,我似乎无法弄清楚这个问题。代码只是一个用于查找数组中最大和最小数字的函数,即使这不是一种有效的方法,我也不知道代码是从哪里得到一个 int 的。任何人都能够阐明这一点?

using System;
using System.Linq;
public class Program 
{
    public static double[] FindMinMax(double[] values) 
    {

        double small = values.Min();
        double big = values.Max();

        double result = new double[small, big];

        return result;
    }
}

标签: c#arrayssortingvariablestype-conversion

解决方案


我不知道代码从哪里得到一个 int

您在这里要求 ( new double[small, big]) 创建一个二维(矩形)数组,其尺寸(例如)为 17.2 × 42.6 - 它希望成为整数的那些尺寸。


我认为您的意思是创建一个向量(一维从零开始的数组),其中两个值作为内容

double[] result = new double[] {small, big};

虽然我怀疑值元组会更有效地工作,即

public static (double Min, double Max) FindMinMax(double[] values) 
{
    // ...
    return (small, big);
}

您可能还想研究是否是最佳的(可能不是)编写一个显式的单个循环来检查每个步骤中的最小值和最大值,而不是两次迭代。但只要数据不是很大,那根本不重要。如果它很大,那么您将进入诸如对数组进行分片和在不同的分片上执行并行最小/最大,然后聚合分片结果之类的主题。这里也可能有 SIMD 选项。


推荐阅读