在 C# 中获取两个数组之间的组合交叉耦合



我有一个数据表名称dt,其中包含如下列:

A1     B1     A2    B2.

这意味着我有数组:

A = { A1, A2 }
B = { B1, B2 }

注意:大约八个数组:A,B,C,D,E,F,G,H。我必须配对:

A vs B
C vs D
E vs F
....

我想在两个数组之间划分对,例如:

A1    pair with     B2.
A2    pair with     B1.

我尝试使用代码:

foreach (DataRow r in dt.Rows)
{
    firstSumValCombinate = numRows * (Convert.ToDouble(r["A0_1"]) / Convert.ToDouble(r["B0_2"]));
    averageFirst = (firstSumValCombinate * numKillProc) / 2;
    ......
    finalResultFirst = (many manipulate) * firstSumValCombinate;
    secondSumValCombinate = numRows * (Convert.ToDouble(r["A0_2"]) / Convert.ToDouble(r["B0_1"]));
    averageFirst = (secondSumValCombinate * numKillProc) / 2;
    finalResultSecond = (many manipulate) * secondSumValCombinate;
}

我有很多变量number + "SumValCombinate"

计算器时几乎相似。

它只会改变r[columnsName],所以我必须写很多代码。

我猜您遇到的问题是您无法存储所有结果。所以解决方案就是将结果存储在 List<double> .

List<double> firstSumValCombinate = new List<double>();
List<double> secondSumValCombinate = new List<double>();
foreach (DataRow r in dt.Rows)
{
   firstSumValCombinate.Add(Convert.ToDouble(r["A0_1"]) / Convert.ToDouble(r["B0_2"]));
   secondSumValCombinate.Add(Convert.ToDouble(r["A0_2"]) / Convert.ToDouble(r["B0_1"]));
}

这是一个完整的工作代码示例,它与您所说的将结果存储在 2 个数组中的内容相匹配:

DataTable dt = new DataTable();
dt.Columns.Add("A0_1", typeof(double));
dt.Columns.Add("A0_2", typeof(double));
dt.Columns.Add("B0_1", typeof(double));
dt.Columns.Add("B0_2", typeof(double));
dt.Rows.Add(4.0, 10.0, 2.0, 2.0);
dt.Rows.Add(20.0, 30.0, 10.0, 5.0);
double[] resultsFirst = new double[dt.Rows.Count];
double[] resultsSecond = new double[dt.Rows.Count];
int index = 0;
foreach (DataRow r in dt.Rows)
{
    resultsFirst[index] = r.Field<double>("A0_1") / r.Field<double>("B0_2");
    resultsSecond[index] = r.Field<double>("A0_2") / r.Field<double>("B0_1");
    index++;
}
for (int i = 0; i < resultsFirst.Length; i++)
{
    Console.WriteLine($"First = { resultsFirst[i] } ** Second = { resultsSecond[i] }");
}

结果:

First = 2 ** Second = 5
First = 4 ** Second = 3

最新更新