数组的基本操作

时间:2018-03-24 01:29:38

标签: c# arrays operations

我正在一个个性化的Math类中工作,我打算实现基本的操作方法,以便他们以简单的方式进行加,减,乘或除,而不必每次都调用运算符+ - * /

    public class XMath
    {
        public static double Sum(params double[] values)
        {
            double result = 0;

            if (values.Length < 1 || values is null) result = 0;
            else if (values.Length == 1) result = values[0];
            else foreach (double value in values) result += value;

            return result;
        }

        public static double Subtract(params double[] values)
        {
            double result = 0;

            if (values.Length < 1 || values is null) result = 0;
            else if (values.Length == 1) result = values[0];
            else foreach (double value in values) result -= value;

            return result;
        }

        public static double Multiply(params double[] values)
        {
            double result = 0;

            if (values.Length < 1 || values is null) result = 0;
            else if (values.Length == 1) result = values[0];
            else foreach (double value in values) result *= value;

            return result;
        }

        public static double Divide(params double[] values)
        {
            double result = 0;

            if (values.Length < 1 || values is null) result = 0;
            else if (values.Length == 1) result = values[0];
            else foreach (double value in values) result /= value;

            return result;
        }
    }

我的问题是Sum方法完美无缺,但其他方法却产生了错误的结果

  

所以,如果 + = 它可以工作,因为 - = * = / = 没有< / p>

3 个答案:

答案 0 :(得分:6)

主要问题是您使用0初始化result变量。

假设数组double[] values = new [] { 1.0, 2.0, 3.0 },您的Sum方法计算0 + 1 + 2 + 3Subtract计算0 - 1 - 2 - 3Multiply计算0 * 1 * 2 * 3

额外0对总和没有影响,但它会影响其他操作。

您应该使用数组的第一个元素而不是0来初始化您的操作。

您还可以查看可以简化代码的Aggregate方法

values.Aggregate((x, y) => x + y);
// ...
values.Aggregate((x, y) => x - y);
// ...
values.Aggregate((x, y) => x * y);
// ...
values.Aggregate((x, y) => x / y);

答案 1 :(得分:1)

这是一个for循环优于foreach循环的实例

    public static double Sum(params double[] values)
    {
        if (values.Length < 1 || values is null) 
           return 0;
        double result = values[0];
        for(int i = 1; i < values.Length; i++)
           result += values[i];
        return result;
    }

答案 2 :(得分:0)

您可以使用Enumerable.Aggregate<TSource>(IEnumerable<TSource>, Func<TSource, TSource, TSource>)表单System.Linq

汇总使用IEnumerable,但在您的情况下会创建double

示例(和数组为IEnumerable):

using System.Linq;

double[] values = new [] {5, 9, 3};

values.Aggregate((x, y) => x + y);