dart:list的fold方法

fold 方法会从 初始值(一个累加器)开始,依次遍历列表中的元素,并按照你提供的函数进行累计计算,最终返回一个结果。

R fold<R>(
  R initialValue,
  R combine(R previousValue, E element)
)
  • initialValue:初始值(累加器的起点)。
  • combine:函数,接收两个参数:
    • previousValue:上一次计算后的累加器值
    • element:当前遍历到的元素
      并返回一个新的累加器值。
  • 返回值:最终的累计结果。

求和:

void main() {
  var numbers = [1, 2, 3, 4, 5];
  var sum = numbers.fold(0, (prev, element) => prev + element);
  print(sum); // 15
}

执行过程:

  • 初始值 prev = 0
  • 第1次:prev = 0 + 1 = 1
  • 第2次:prev = 1 + 2 = 3
  • 第3次:prev = 3 + 3 = 6
  • 第4次:prev = 6 + 4 = 10
  • 第5次:prev = 10 + 5 = 15

拼接字符串

void main() {
  var words = ['Hello', 'Dart', 'Fold'];
  var sentence = words.fold('', (prev, element) => prev + element + ' ');
  print(sentence.trim()); // "Hello Dart Fold"
}

统计字符串长度总和

void main() {
  var words = ['a', 'bb', 'ccc'];
  var totalLength = words.fold(0, (prev, element) => prev + element.length);
  print(totalLength); // 6
}

转换成 Map

void main() {
  var words = ['apple', 'banana', 'apple', 'orange'];
  var freq = words.fold<Map<String, int>>({}, (map, word) {
    map[word] = (map[word] ?? 0) + 1;
    print("map[$word]: ${map[word]}");
    return map;
  });
  print(freq); // {apple: 2, banana: 1, orange: 1}
}
// I/flutter (20487): map[apple]: 1
// I/flutter (20487): map[banana]: 1
// I/flutter (20487): map[apple]: 2
// I/flutter (20487): map[orange]: 1
// I/flutter (20487): {apple: 2, banana: 1, orange: 1}

×

喜欢就点赞,疼爱就打赏