首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dart:将字符串列表映射为字符串

Dart:将字符串列表映射为字符串
EN

Stack Overflow用户
提问于 2021-05-27 07:18:29
回答 2查看 202关注 0票数 0

当我们在dart中使用map函数时,我不太清楚执行顺序。

例如,下面的代码(这个例子可能很琐碎,但我只想说明我的问题)

这是试图将标题列表转换为包含所有标题的字符串。

代码语言:javascript
复制
var moviesTitles = ['Inception', 'Heat', 'Spider Man'];

moviesTitles.map((title) => title).join('\n')

所以,我不确定我的理解中哪一个是正确的

  1. 首先,映射函数将(标题) =>标题应用于每个项目,然后将它们合并到一个新的列表中,然后使用\n连接它们

  1. map函数将( title ) =>标题应用于每个项,并在每个循环中将其追加\n;然后仅在末尾将它们合并为字符串。顺序如下所示

1.起始+“\n”

2.Heat+ '\n‘

3.蜘蛛侠+“\n”

最后,盗梦空间+ '\n‘+ Heat+ '\n’+蜘蛛侠+ '\n‘

我发现理解2号更有意义,但在地图之后显示.join的语法似乎不符合这个逻辑

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-27 20:12:00

map函数是惰性的。因此,调用titles.map((title) => title)立即创建一个新的Iterable,它包装列表titles和函数(title) => title

然后在可迭代性上调用.join('\n')。它没有具体说明它是做什么的,每个平台都可以有自己的join实现,但是我们知道它迭代它被调用的可迭代性,方法是获得.iterator,然后调用该迭代器的.moveNext()并得到它的.current,直到它有它的所有值。

迭代titles.map(...)可迭代将迭代titles。因为titles是一个列表,所以它可能优化为只按索引访问成员。当迭代器被要求获得一个值(使用moveNext,然后使用current)时,它将得到titles的下一个元素,并使用它调用(title) => title,然后提供它的值current。当他们被要求的时候,一个接一个。

join调用获取这些字符串,并以某种方式将它们与\n字符串组合。可以是StringBuffer,也可以是列表,也可以是非平台代码不可用的内部功能(比如直接写入分配的字符串)。我们可能永远也不会知道。(剧透,这是一个StringBuffer)。

票数 0
EN

Stack Overflow用户

发布于 2021-05-27 07:59:13

简短答案:第一变体

根据文件:

可迭代映射(T函数(字符串) f)

返回一个新的惰性Iterable,元素是通过对这个Iterable的每个元素按迭代顺序调用f创建的。

此方法返回映射元素的视图。只要返回的Iterable不被迭代,所提供的函数f就不会被调用。转换后的元素不会被缓存。在返回的Iterable上多次迭代将在同一元素上多次调用提供的函数f。

返回的迭代中的方法可以省略对不需要结果的任何元素调用f。例如,elementAt可能只调用f一次。

字符串联接(字符串分隔符= "")

将每个元素转换为字符串并连接字符串。

迭代此可迭代的元素,通过调用Object.toString将每个字符串转换为字符串,然后将字符串连接起来,分隔符字符串在元素之间交错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67717389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档