【问题标题】:Check if element is the last value in fold function检查元素是否是折叠函数中的最后一个值
【发布时间】:2021-06-03 20:15:46
【问题描述】:

我在尚未分配给变量的数组上使用折叠,并想检查该元素是否是最后一个值。使用传统的 for 循环,我可以做到这一点:

List<int> ints = [1, 2, 3];
int sum = 0;
for (int num in ints]) {
  if (num != ints.last) {
    sum = sum + num;
  }
}
print(sum);

是否可以用 fold 来代替?

int foldSum = [1, 2, 3].fold(0, (int prev, element) => prev + element);
print(foldSum);

当 fold 是最后一个值时,我找不到任何检查方法。注意:这是我的问题的简化示例,列表未分配给变量的原因(允许我使用.last)是因为它是调用.map() 的结果。

为了完整起见,下面是实际代码(显然不能单独运行,但有助于说明我的问题)我正在尝试转换为使用 .map.fold

  String get fieldsToSqlInsert {
    String val = "";
    for (Column column in columns) {
      if (data.containsKey(column.name)) {
        val = '$val "${data[column.name]}"';
      } else {
        val = "$val NULL";
      }
      if (column != columns.last) {
        val = "$val,";
      }
    }
    return val;
  }

但它不起作用,因为我不知道如何检查 fold 何时位于最后一个元素:

  String get fieldsToSqlInsert => columns
      .map((column) =>
          data.containsKey(column.name) ? data[column.name] : "NULL")
      .fold("", (val, column) => column != columns.last ? "$val," : val);

【问题讨论】:

    标签: dart fold


    【解决方案1】:

    如果您只是想从进一步计算中排除最后一个元素,您可以使用take 这样做:

    String get fieldsToSqlInsert => columns.take(columns.length - 1)...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-25
      • 2020-07-27
      • 2019-04-08
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 2011-08-30
      相关资源
      最近更新 更多