根据 documentation 中的示例:
var pairs = [[1, 2], [3, 4]];
var flattened = pairs.expand((pair) => pair).toList();
print(flattened); // => [1, 2, 3, 4];
var input = [1, 2, 3];
var duplicated = input.expand((i) => [i, i]).toList();
print(duplicated); // => [1, 1, 2, 2, 3, 3]
如果它包含嵌套的可迭代对象,它看起来会展平一个可迭代对象,但问题是如何的。
最佳答案
它的基本作用是,它迭代可迭代对象,在每次迭代时调用参数函数,并在迭代结束后连接参数函数返回的可迭代对象,最后返回可迭代对象的连接结果。
这是对其工作原理的总结,让我们使用文档本身的示例来理解它:
var pairs = [[1, 2], [3, 4]];
var flattened = pairs.expand((pair) => pair).toList();
print(flattened); // => [1, 2, 3, 4];
这里我们有一个可迭代的 pairs
我们称之为expand()
方法就可以了。现在expand()
方法将迭代 pairs
调用参数函数 (pair) => pair
每次迭代一次。
请注意 expand()
的语法方法如下 Iterable<T> expand<T>(Iterable<T> f(T element))
它清楚地表明它接受一个函数作为参数,该函数接受 T
类型的参数并返回一个可迭代对象。例如(pair) => pair
其中pair
类型为List<int>
到目前为止,我们很清楚 expand()
方法迭代一个可迭代对象,并在每次迭代时调用参数函数。参数函数接受一个与可迭代对象类型相同的参数,并返回一个可迭代对象。
最后,expand()
一旦对可迭代对象进行迭代,方法就会连接参数函数返回的可迭代对象,例如pairs
已结束[1, 2] + [3, 4] = [1, 2, 3, 4]
。然后它返回串联的结果,它是一个可迭代的 [1, 2, 3, 4]
.
关于function - Iterable.expand(Iterable Function(dynamic) f) 函数在 Dart 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68417570/