【问题标题】:Condensing lines of code压缩代码行
【发布时间】:2014-03-13 01:13:29
【问题描述】:

如果我在下面有以下代码行,有什么方法可以将其压缩为 1 或 2 行并使用循环或类似的东西?有超过 100 个索引,所以要写出大量的文本。

unrlzdPnl = 
(((Positions[0].GetProfitLoss(Closes[0][0], PerformanceUnit.Points))*200)
+ ((Positions[1].GetProfitLoss(Closes[1][0], PerformanceUnit.Points))*200)
+ ((Positions[2].GetProfitLoss(Closes[2][0], PerformanceUnit.Points))*200)
+ ((Positions[3].GetProfitLoss(Closes[3][0], PerformanceUnit.Points))*200)
+ ((Positions[4].GetProfitLoss(Closes[4][0], PerformanceUnit.Points))*200)
+ ((Positions[5].GetProfitLoss(Closes[5][0], PerformanceUnit.Points))*200)
+ ((Positions[6].GetProfitLoss(Closes[6][0], PerformanceUnit.Points))*200)
);

【问题讨论】:

  • 语言是什么?爪哇?我们编辑添加了这一点,请在您的问题中添加更多详细信息。
  • 这个问题回答了吗?你的意思是不同的吗?

标签: java optimization indexing


【解决方案1】:

也许我不明白,但我想说:

int unrlzPnl = 0;
for (int i = 0; i < nb_indices; i++) {
    unrlzdPnl += Positions[i].GetProfitLoss(Closes[i][0],
                                            PerformanceUnit.Points);
}
unrlzPnl *= 200;

编辑#1:

不要忘记在循环之前初始化unrlzPnl。如果您想查看每次迭代会发生什么(假设您使用的是Java):

int unrlzPnl = 0;
for (int i = 0; i < nb_indices; i++) {
    System.out.println("Iteration " + i + ":");
    System.out.println("unrlzdPnl (old): " + unrlzdPnl);
    unrlzdPnl += Positions[i].GetProfitLoss(Closes[i][0],
                                            PerformanceUnit.Points);
    System.out.println("unrlzdPnl (new): " + unrlzdPnl + "\n");
}
return unrlzPnl * 200;
System.out.println("unrlzdPnl (final value): " + unrlzdPnl);

编辑 #2:

好的,如果你真的希望它尽可能紧凑,并且每次调用函数时都避免初始化:

int MyFunction(int nb_indices) {
    if (1 > nb_indices)
        return 0;

    unrlzdPnl = Positions[0].GetProfitLoss(Closes[0][0],
                                           PerformanceUnit.Points);

    for (int i = 1; i < nb_indices; i++)
        unrlzdPnl += Positions[i].GetProfitLoss(Closes[i][0],
                                                PerformanceUnit.Points);

    return unrlzPnl * 200;
}

【讨论】:

  • 不,我想你明白了,我只是不知道简单的代码,+= 是我需要的。谢谢
  • 其实我似乎得到了不同的结果,是 for (int i = 0; i
  • 是的,应该是。如果您想确定,您可以打印出循环内的行,这将准确显示程序循环的次数以及每次迭代的变量值。
  • 在比较结果之前不要忘记unrlzdPnl的初始化和最后乘以200。另外,我隐含地假设 unrlzdPnl 是一个integer,但如果不是这样,你应该使用适当的类型和初始化。
  • 好的,我知道了,我初始化了 unrlzdPnl 并认为覆盖了它,但我还需要在方法中包含它,以便在每次更新方法时重置它。节省大量代码。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多