选择不同列中最大值/最小值对应的元素
本文关键字:最小值 元素 最大值 选择 | 更新日期: 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;