gpt4 book ai didi

c# - 比较数组或其他方法

转载 作者:太空狗 更新时间:2023-10-29 23:51:21 25 4
gpt4 key购买 nike

<分区>

我是 C# 的新手。我一直在寻找一种简单的方法来检查数组中的所有值是否介于或等于下限和上限,这些值对于数组中的每个元素都是不同的。我还对每个数据集进行了多次评估。这是我目前使用的方法,效果很好,但我希望使用更高效的方法。似乎 pedicate 方法似乎符合我的需要,但我不确定如何让它发挥作用。

最后还有几个小问题由此引出。

我使用的数组通常有大约 20 个元素,而不是这里的 5 个。

已更改列名称以保护无辜者...

int x;
bool failed;
double [] myArray = new double [5];

for(int a = 0;a<= Convert.ToInt32(temp.Compute("Max(Col1)",string.Empty));a++)
{
failed = false;

IEnumerable<DataRow>rows = temp.AsEnumerable()
.Where(r=>r.Field<int>("Col1") == a
&& r.Field<int>("Col2") > 0
&& r.Field<int>("Col2") < 2000
&& r.Field<decimal>("Col3") > 0
&& r.Field<decimal>("Col3") < 1000
);

myArray[0] = rows.AsEnumerable().ToList().Count;
myArray[1] = rows.AsEnumerable().Sum(row => row.Field<int>("Col4"));
myArray[2] = rows.AsEnumerable().Average(row => row.Field<int>("Col4"));
myArray[3] = rows.AsEnumerable().Max(row => row.Field<int>("Col5"));
myArray[4] = rows.AsEnumerable().Min(row => row.Field<int>("Col5"));

//CHECK 1 ////////////////////////////////////////
double [] lowerLimit1 = {0,10,0,50000,2};
double[] upperLimit1 = {6000,20,0.75,80000,2};
for(int d = 0;d< myArray.Length;d++)
{
if(myArray[d] >= lowerLimit1[d] && myArray[d] <= upperLimit1[d])
{
x++;
};
};
if(x > myArray.Length)
{
failed = true;
dt = rows.CopyToDataTable<DataRow>();
};
//CHECK 2 ////////////////////////////////////////
if(! failed)
{
x = 0;
double [] lowerLimit2 = {6000,50,0,30000,2};
double[] upperLimit2 = {6000,10,0.75,50000,2};
for(int d = 0;d< myArray.Length;d++)
{
if(myArray[d] >= lowerLimit2[d] && myArray[d] <= upperLimit2[d])
{
x++;
};
};
if(x > myArray.Length)
{
failed = true;
dt = rows.CopyToDataTable<DataRow>();
};
};
//CHECK 3 ////////////////////////////////////////
if(! failed)
{
x = 0;
double [] lowerLimit3 = {4000,15,0,50000,2};
double[] upperLimit3 = {5000,20,0.75,80000};
for(int d = 0;d< myArray.Length;d++)
{
if(myArray[d] >= lowerLimit3[d] && myArray[d] <= upperLimit3[d])
{
x++;
};
};
if(x > myArray.Length)
{
failed = true;
dt = rows.CopyToDataTable<DataRow>();
};
};

}; //END LOOP
if(failed)
{
// Do stuff and things
};

还有没有一种方法可以在不重新创建数据行对象的情况下执行以下操作?这给出了意外符号“Where”的错误。

myArray[4] = rows.AsEnumerable().Min(row => row.Field<int>("Col1") Where row.Field<int>("Col3") == 10);

我正在尝试实现以下目标,但是使用数据表速度较慢,这就是我使用上述方法的原因。

myArray[4] = Convert.ToInt32(temp.Compute("Min(Col1)","Col3 = 10"));

最后,有没有一种方法可以不使用循环来重新填充数组,我已经尝试过 array.Dispose() 和 array = null 但它们不起作用。例如

double [] lowerLimit = {4000,15,0,50000,2};
double[] upperLimit = {5000,20,0.75,80000};

//重新填充数组,这显然不起作用。

lowerLimit = {6000,50,0,30000,2};
upperLimit = {7000,60,0.75,50000,2};

这比下面的代码或在上面的代码中使用多个数组要整洁得多,因为在使用中数组中通常有 20 多个元素。

lowerLimit[0] = 6000, upperLimit[0] = 7000;
lowerLimit[1] = 50, upperLimit[1] = 60;
lowerLimit[2] = 0, upperLimit[2] = 0.75;
lowerLimit[3] = 30000, upperLimit[3] = 50000;
lowerLimit[4] = 2, upperLimit[4] = 2;

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com