我有一个列表,其中包含多级嵌套列表.每个列表都可以包含字符串和其他类型实例.
例如
var list = [ 'a', 'w', ['e', ['f', new Object(), 'f'], 'g'], 't', 'e'];
Run Code Online (Sandbox Code Playgroud)
我想编写一个函数(比如说compress)来组合字符串和它们的兄弟,并保持其他类型实例不变,最后得到一个没有嵌套列表的列表.
compress(list){//怎么样?}
结果compress(list)将是:
['awef', new Object(), 'fgte']
Run Code Online (Sandbox Code Playgroud)
这是快速而明确的解决方案吗?
Terse和功能性FTW
List compress(Iterable iterable) => concat(flatten(iterable));
Iterable flatten(Iterable iterable) =>
iterable.expand((e) => e is Iterable ? flatten(e) : [e]);
List concat(Iterable iterable) => iterable.fold([], (list, e) =>
list..add((e is String && list.isNotEmpty && list.last is String)
? list.removeLast() + e : e));
Run Code Online (Sandbox Code Playgroud)