选择不同列中最大值/最小值对应的元素

本文关键字:最小值 元素 最大值 选择 | 更新日期: 2023-09-27 17:51:05

我试图找到在我的数组中的另一列中对应的最大值的值,但得到一个错误与当前的代码说无法转换类型的WhereSelectArrayIterator 2对象[main . allclasss . maxmin,System。输入"System.IConvertible"

我将类型为MaxMin的列表分配给数组,然后尝试计算第二列中的maxima及其相应元素。下面是代码:

MaxMin finalMax = new MaxMin();
if (maxima.Count != 0)
{
      MaxMin[] maxArray = maxima.ToArray();
      finalMax.val = maxArray.Select(x => x.val).Max();
      finalMax.cnt = Convert.ToInt32(maxArray.Where(x => x.val.Equals(finalMax.val)).Select(x => x.cnt));
}

完整代码:

public MaxMin Maxima(float[] values, MaxMin drop)
    {
        float[] T = new float[5] { 0, 0, 0, 0, 0 };
        float[] dT = new float[4] { 0, 0, 0, 0 };
        int count = 0;
        List<MaxMin> maxima = new List<MaxMin>();

        count = values.Length;

        try
        {
            for (int i = 99; i < count - 100; i++)
            {
                MaxMin max = new MaxMin();
                T[0] = values[i - 1];
                T[1] = values[i];
                T[2] = values[i + 1];
                T[3] = values[i + 2];
                T[4] = values[i + 3];
                dT[0] = T[1] - T[0];
                dT[1] = T[2] - T[1];
                dT[2] = T[3] - T[2];
                dT[3] = T[4] - T[3];

                if (i > drop.cnt)     //cutoff time above which calculation of minima will be initiated
                {
                    if (dT[1] > 0 && dT[3] < 0)
                    {
                        float[] diff = new float[8] { 0, 0, 0, 0, 0, 0, 0, 0 };
                        diff[0] = (values[i + 1] - values[i - 19]);
                        diff[1] = (values[i + 1] - values[i + 19]);
                        diff[2] = (values[i + 1] - values[i - 49]);
                        diff[3] = (values[i + 1] - values[i + 49]);
                        diff[4] = (values[i + 1] - values[i - 69]);
                        diff[5] = (values[i + 1] - values[i + 69]);
                        diff[6] = (values[i + 1] - values[i - 99]);
                        diff[7] = (values[i + 1] - values[i + 99]);
                        if (diff[0] < 20 && diff[1] < 20 && diff[2] < 20 && diff[3] < 20 && diff[2] > 0 && diff[3] > 0 && diff[4] > 0.5 && diff[5] > 0.5 && diff[6] > 2 && diff[7] > 2)
                        {
                            max.cnt = i + 1;
                            max.val = values[i + 1];
                            maxima.Add(max);
                        }
                    }
                }
            }

            MaxMin finalMax = new MaxMin();
            if (maxima.Count != 0)
            {
                MaxMin[] maxArray = maxima.ToArray();
                finalMax.val = maxArray.Select(x => x.val).Max();
                finalMax.cnt = Convert.ToInt32(maxArray.Where(x => x.val.Equals(finalMax.val)).Select(x => x.cnt));
            }
            else
            {
                finalMax.val = values.Max();
                finalMax.cnt = Array.IndexOf(values, values.Max());
            }

            return finalMax;
        }
        catch (Exception ex)
        {
            throw ex;
        }
  }

选择不同列中最大值/最小值对应的元素

您正在尝试将返回IEnumerable<T>Select方法调用的结果转换为int。这是行不通的。

使用First代替Where/Select:

finalMax.cnt = maxArray.First(x => x.val.Equals(finalMax.val)).cnt;