function - Iterable.expand(Iterable Function(dynamic) f) 函数在 Dart 中如何工作?

标签 function dart iterable

根据 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/

相关文章:

javascript/jquery - 在函数中设置(this)

使用c中的用户输入和函数计算数组的总和和平均值

flutter - 延迟 BottomNavigationBar

python - 为 Pandas 提供 python iterable 与 pd.Series for column 的区别

C递归代码

c++ - 函数是否在退出作用域时清除动态内存?

flutter - Pubspec.yaml 这个文件在 Flutter 中的作用

android - 在 Android Studio 中 Dart 。没有运行应用程序的设备

python - 如何将字符串作为单个项目放入集合中?

python - 为什么我需要 2 对括号来声明一个数字列表