如何在 Dart 中仅使用级联或链式调用干净地映射/排序/折叠/排序/扩展?
Posted
技术标签:
【中文标题】如何在 Dart 中仅使用级联或链式调用干净地映射/排序/折叠/排序/扩展?【英文标题】:How do I cleanly map / sort / fold / sort / expand using only cascades or chained calls, in Dart? 【发布时间】:2013-12-08 07:16:08 【问题描述】:我想对一个源列表执行以下操作:
地图 到列表 排序 折叠 排序 展开 到列表其中一些方法,如 map 和 toList 是可链接的,因为它们返回一个非空对象。但是,sort
方法返回 void
,因为它对 List 进行操作,而不返回列表。
Dart 有一个 method cascade operator,它非常适用于不返回 this
或其他对象的方法调用。
如果不求助于在 sort
之后分配一个变量然后再次启动调用链,我很难编写上述调用序列。
我想写相当于:
return thing
.map(...)
.toList()
.sort(...)
.fold(...)
.sort(...)
.expand(...)
.toList();
我能得到的最接近的是:
var thing
.map(...)
.toList()
..sort(...);
var otherThing = thing
.fold(...)
..sort(...);
var finalThing = otherThing.expand(...).toList();
有没有更好的方法?我如何“突破”级联并继续上链?
【问题讨论】:
有一个关于这个主题的问题:Move sort to Iterable, return an iterable (instead of changing the collection in place). 【参考方案1】:你能添加一些括号吗?我猜是这样的......
return ((thing
.map(...)
.toList()..sort(...))
.fold(...)..sort(...))
.expand(...)
.toList();
【讨论】:
@Nican - 回滚您的编辑,因为 Seth 知道方法级联。他在他的问题中使用它们。 问这个问题的人是;另一位阅读该问题的读者(如我 5 分钟前)没有。 好的 - 我更新了 Seth 的问题以添加指向本文的链接。 news.dartlang.org/2012/02/… 我用链接更新了帖子。感谢您的澄清。 谢谢@GregLowe。我希望我们有一个返回列表的排序,它会让这更容易。以上是关于如何在 Dart 中仅使用级联或链式调用干净地映射/排序/折叠/排序/扩展?的主要内容,如果未能解决你的问题,请参考以下文章