Java评估中的数组或对象?

我正在进行代码优化,其中我有几行(〜500-1000)至少300列的数据。 数据存储为对象数组:

data = [
  {col1: 1,col2: 2,col3: null,col4: 1.3,col5:undefined,col6: 2,....},{col1: 3,col2: 4,col3: 3,col4: 1.1,col5:8,.
  .
  .
  {col1: 1.1,col2: 1.2,col3: 7,col4: 3,col5:4,....}
]

然后,我还有另一个名为计算器的对象数组,它们是用户定义的计算。这些计算可以在下面的数组中包含另一个计算出的变量,例如第二个对象。 所以我需要保持顺序。

calculators = [
  {formula:'col1 + sin(col2)',order:0,colname: 'calc1'}
  {formula:'calc1 * col6',order:1,colname: 'calc2'}
  .
  .
  .
  {formula: 'any random calculation',order:n,colname:'RandomName'}
]

我当前的代码流是

  • 从计算器中提取相关列,例如col1和col2 对于来自calc2的calc1和col6。 dependentCols = [col1,col2,col6]
  • 使用嵌套的for循环遍历数据数组,用于计算器和列,并在解析器中为每个值设置值 从属列。 parser.set(column,row[column]);
  • 然后进行公式求值并将该值附加到dararow。

我拥有的原始代码包括一些其他内容,用于处理子列,单元和其他内容。这就是为什么不粘贴原始代码,而是草稿的原因。

const parser = math.parser();
data = _.map(data,row=>{
    row = {...row};
    _.forEach(calculators,(calculator)=>{
      _.forEach(dependentCols,col=>{
            // cannot add the whole row as it is because of the sub-column stuff.
            parser.set(col,row[col]);
        });
        try {
          const value = parser.eval(calculator.formula);
          row[colname] = value;
        } catch (exception) {
          console.warn(parser,exception,calculator.colname);
        }
      }
    });
    return row;
  });
}

原始代码肯定有效(一年)。它非常缓慢,有450行和20次计算,最多需要12秒。 因此,我不是在逐行且逐个单元地进行有效处理,而是在考虑将整列同时传递给eval函数。但是我找不到任何支持文档。

任何帮助将不胜感激。

condorc 回答:Java评估中的数组或对象?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3093942.html

大家都在问